У меня возникла следующая проблема: есть пользователь, которому нужно выполнить хранимую процедуру (spTest). В spTest вызывается sp_trace_generateevent. sp_trace_generateevent требует прав на изменение трассировки, и я не хочу, чтобы у пользователя это было. Поэтому я хотел бы, чтобы пользователь мог выполнить spTest. Как я могу это сделать?
Благодарим вас за помощь.
Выполнять хранимую процедуру в качестве другого запроса пользователя
Ответ 1
Попробуйте следующее:
EXECUTE AS user = 'special_user'
EXECUTE YourProcerdure
REVERT
см. следующие:
Понимание контекстного переключения <<<has examples of things like you are trying to do
Понимание контекста выполнения
EXECUTE AS (Transact-SQL)
EXECUTE AS (Transact-SQL)
Ответ 2
Как показали другие, вы можете добиться того, что хотите, используя предложение Execute As. На примерах вариантов реализации взгляните на документацию Books Online для предложения Execute As.
Для дальнейшего чтения и для того, чтобы лучше понять эту тему, то, что вы хотите достичь, входит в концепцию безопасности Контекстное переключение.
Ответ 3
это то, что я сделал (и преуспел):
let Source = Sql.Database("server", "database",
[Query= "EXECUTE AS USER='user' EXECUTE [schema].[spname] 'parm1', 'parm2'"])
в Источник
Ответ 4
Когда вы перейдете к выполнению этой конкретной хранимой процедуры, вам нужно будет создать другое соединение с использованием необходимых учетных данных пользователя.