Выполнить хранимую процедуру как другое разрешение пользователя - PullRequest
19 голосов
/ 12 мая 2010

Я столкнулся со следующей проблемой: есть пользователь, который должен выполнить хранимую процедуру (spTest). В теле spTest вызывается sp_trace_generateevent. Процедура sp_trace_generateevent требует изменения прав на трассировку, и я не хочу, чтобы у пользователя она была. Поэтому я бы хотел, чтобы пользователь мог выполнять spTest. Как я могу это сделать?

Ответы [ 4 ]

28 голосов
/ 12 мая 2010

Попробуйте это:

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)

3 голосов
/ 12 мая 2010

Как уже предлагали другие, вы можете достичь того, чего хотите, используя предложение «Выполнить как». Примеры вариантов реализации приведены в документации Books Online для предложения Execute As .

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

1 голос
/ 20 ноября 2017

Вот что я сделал (и добился успеха):

let Source = Sql.Database("server", "database", 
    [Query= "EXECUTE AS USER='user' EXECUTE [schema].[spname] 'parm1', 'parm2'"])

в

Source
0 голосов
/ 12 мая 2010

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

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