Как изменить аутентифицированный логин MS SQLServer без закрытия и повторного открытия соединения? - PullRequest
0 голосов
/ 05 декабря 2008

У меня есть соединение с Microsoft SQL Server, и я хочу изменить пользователя, прошедшего аутентификацию соединения. Возможно ли это сделать без закрытия и повторного открытия соединения?

В идеале это что-то вроде функции Oracle set role .

Мне бы очень хотелось, если бы это решение также работало для SQL Server 2000.

Ответы [ 3 ]

1 голос
/ 05 декабря 2008

Возможно, вы захотите взглянуть на роли приложения (sp_setapprole), но вы должны знать о последствиях, заключающихся в том, что после изменения контекста (например, установки роли) его нельзя восстановить с помощью SQL Server 2000 ( это возможно с 2005 года). Результатом этого является то, что соединение практически бесполезно, когда оно закрыто в вашем коде, например его нельзя вернуть в пул и использовать повторно, что приводит к проблемам с масштабируемостью.

В противном случае невозможно изменить контекст безопасности после того, как он был установлен.

1 голос
/ 05 декабря 2008

Насколько я знаю, SQL Server очень отличается от учетной записи, которая передается в контексте аутентификации. Возьмите Enterprise Manager и другие инструменты, например, вы должны отключиться и подключиться заново, чтобы сменить пользователя.

Кроме того, если посмотреть, как работает пул соединений , это указывает на то, что само соединение кэшируется для конкретного пользователя, поэтому, если вы изменили исполняющие стороны на полпути, это вызовет серьезные проблемы с безопасностью.

Итак, короткий ответ, нет, насколько я знаю, это невозможно.

0 голосов
/ 10 января 2009

В зависимости от того, что вы делаете, EXECUTE AS может помочь вам здесь. Это позволяет вам выполнять SQL в контексте другого пользователя аналогично тому, как RUN AS доступен в оболочке Windows. Профилировщик и трассировка аудита в SQL Server позволяют увидеть как исходного пользователя, так и контекст, в котором выполняется оператор.

EXECUTE AS USER = 'newuser'; SELECT ... <- код SQL из-под контекста newuser REVERT; </p>

Примечание. Это недоступно в SQL Server 2000 и было добавлено из-за запросов, подобных вашему.

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