Как передать внеполосные (текущий идентификатор пользователя) данные в SQL Server 2008 - PullRequest
3 голосов
/ 07 июля 2010

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

В прошлой жизни я работал в аналогичной ситуации, используя базу данных Oracle. В этом сценарии каждый раз, когда мы открывали соединение, мы сначала вызывали встроенную процедуру Oracle для установки переменной контекста в области соединения. Эта переменная содержит идентификатор пользователя, который будет использовать соединение. Затем все хранимые процедуры, которые должны были знать текущий пользователь, проверяли переменную контекста.

Концептуально это работало очень похоже на передачу пользовательской информации в CallContext перед удаленным вызовом.

У меня вопрос, есть ли подобный механизм в сервере Microsoft SQL?

Obvioulsy, если я должен, я могу передать UserId в качестве аргумента для каждой хранимой процедуры, но это именно то, что я пытаюсь избежать.

Ответы [ 2 ]

3 голосов
/ 08 июля 2010
0 голосов
/ 07 июля 2010

Что вы можете сделать, это создать пользователей в базе данных (без входа на сервер) и дать им соответствующие разрешения.После этого вы выполняете оператор «выполнить как», и тогда пользовательский контекст для ваших вызовов базы данных будет таким, как если бы пользователь вызвал его.Пример:

EXECUTE AS USER = 'user2';
EXECUTE usp_insert_stuff @params;
REVERT;

Недостаток: вам нужно настроить безопасность SQL и управлять пользователями. Потенциал: пользователи не могут подключиться напрямую к SQL Server, и вы получаете аудит.1007 *

См. Примеры в нижней части страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...