SQL SERVER изменяет контекст безопасности внутри хранимой процедуры - PullRequest
2 голосов
/ 13 сентября 2011

Внутри какой-то хранимой процедуры мне нужно изменить контекст безопасности на более мощный вход в систему. Я пробовал что-то вроде этого:

USE ProjectsDB
EXECUTE AS login = 'sa'

--SOME OPERATIONS

REVERT;

но я получаю следующее сообщение об ошибке:

Msg 15406, Level 16, State 1, Line 3
Cannot execute as the server principal because the principal "sa" does not exist,
this type of principal cannot be impersonated, or you do not have permission.

Логин 'sa' существует со всеми необходимыми разрешениями. В чем может быть проблема?

Илан.

1 Ответ

3 голосов
/ 13 сентября 2011

Для этого вам необходимо иметь разрешение "IMPERSONATE". Проверьте заявление GRANT IMPERSONATE.

Кроме того, я считаю, что лучший способ сделать это (вместо повышения уровня разрешений для SA) на сервере sql:

  • Создать сертификат
  • Подписать хранимую процедуру сертификатом
  • Удалить закрытый ключ из сертификата
  • Создать пользователя из сертификата
  • Предоставить пользователю необходимые права

Необязательно, если вам нужны «Права сервера»:

  • Экспорт сертификата на диск
  • Импорт сертификата в основную базу данных
  • Создать логин из сертификата
  • Предоставьте соответствующие права для входа в систему

Необязательно, если вам нужны "перекрестные права на базу данных"

  • импортировать сертификат в базу данных, где вы хотите предоставить разрешения
  • создать пользователя из сертификата.
  • предоставить правильные права пользователю

SQL Server объединит все права доступа пользователей / входа в систему через сертификаты, и при выполнении подписанной процедуры он будет использовать разрешения пользователей, связанных с сертификатом.

...