web-dev-qa-db-ja.com

ストアドプロシージャを別のユーザー権限として実行する

次の問題に直面しました:ストアドプロシージャ(spTest)を実行しなければならないユーザーがいます。 spTestの本体で、sp_trace_generateeventが呼び出されます。 sp_trace_generateeventには、トレースの変更権限が必要ですが、ユーザーにそれを許可したくありません。したがって、ユーザーがspTestを実行できるようにしたいと考えています。どうやってやるの?

20
StuffHappens

これを試して:

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)

28
KM.

他の人が提案したように、Execute As句を使用すると、希望どおりの結果を得ることができます。実装の選択肢の例については、Books Onlineのドキュメントで Execute As 句を参照してください。

このトピックをさらに読み、理解を深めるために、達成しようとしていることは、セキュリティコンセプト Context Switching の下にあります。

3
John Sansom

これは私がやった(そして成功した)ものです:

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

Source
1
Emilio Pastore