У нас есть веб-приложение, которое использует аутентификацию по формам для аутентификации пользователя на основе таблицы пользователей в базе данных. (Т.е. здесь не задействованы никакие активные каталоги или учетные записи пользователей SQL-сервера). Веб-приложение обращается к серверу SQL с использованием учетной записи службы. Однако для аудита, авторизации и других целей нашим хранимым процедурам необходимо знать, для какого пользователя выполняется любая данная операция.
В прошлой жизни я работал в аналогичной ситуации, используя базу данных Oracle. В этом сценарии каждый раз, когда мы открывали соединение, мы сначала вызывали встроенную процедуру Oracle для установки переменной контекста в области соединения. Эта переменная содержит идентификатор пользователя, который будет использовать соединение. Затем все хранимые процедуры, которые должны были знать текущий пользователь, проверяли переменную контекста.
Концептуально это работало очень похоже на передачу пользовательской информации в CallContext перед удаленным вызовом.
У меня вопрос, есть ли подобный механизм в сервере Microsoft SQL?
Obvioulsy, если я должен, я могу передать UserId в качестве аргумента для каждой хранимой процедуры, но это именно то, что я пытаюсь избежать.