EXECUTE AS と SETUSER
SQL Server では、文字列、コマンド、またはモジュールが実行されるコンテキストを、EXECUTE AS ステートメントを使用して明示的に設定できます。EXECUTE AS は、SETUSER ステートメントに置き換わるものです。コンテキスト切り替えの詳細については、「コンテキストの切り替えについて」を参照してください。
コンテキスト切り替え機能の比較
SETUSER ステートメントと比較した場合、EXECUTE AS には次の利点があります。
sa または dbo 以外のサーバー プリンシパルやデータベース プリンシパルが、EXECUTE AS を呼び出すことができます。
EXECUTE AS ステートメントを呼び出すユーザーは、対象プリンシパルの IMPERSONATE 権限を所持している必要があります。
SETUSER は、sysadmin 固定サーバー ロールのメンバまたは db_owner 固定データベース ロールのメンバに制限されます。
権限借用のスコープは、ステートメントで明示的に定義されます。
指定したプリンシパルは、サーバーレベルの権限借用である LOGIN、またはデータベースレベルの権限借用である USER として指定されます。
SETUSER ステートメントでの権限借用のスコープは暗黙的に定義されます。sysadmin のメンバがステートメントを呼び出すと、サーバーレベルの権限借用が使用されます。dbo であるアカウントがステートメントを呼び出すと、データベースレベルの権限借用が使用されます。
次のいずれかのイベントが発生するまで、権限の借用は有効なままです。
セッションが削除された。
コンテキストが別のログインまたはユーザーに切り替えられた。
コンテキストが前の実行コンテキストに戻された。
SETUSER を使用する場合は、次のいずれかのイベントが発生するまで、権限の借用は有効なままです。
他の SETUSER ステートメントが発行された。
dbo または sysadmin 固定サーバー ロールのメンバであるアカウントが USE ステートメントを使用して現在のデータベースを変更した。
複数のプリンシパル間にまたがって、EXECUTE AS ステートメントを複数回呼び出すことにより、実行コンテキスト スタックを作成できます。EXECUTE AS ステートメントが呼び出されると、REVERT ステートメントによって、コンテキスト スタック内の次の上位レベルのログインまたはユーザーにコンテキストが切り替わります。詳細については、「EXECUTE AS (Transact-SQL)」を参照してください。
SETUSER では、実行コンテキスト スタックを作成できません。
以前のコンテキストに戻す
EXECUTE AS
以前のコンテキストに戻すには、REVERT ステートメントを使用します。REVERT ステートメントの呼び出し側は、権限の借用が行われたのと同じデータベース上に存在する必要があります。
SETUSER
以前のコンテキストに戻すには、ユーザー名を指定しないで SETUSER ステートメントを使用します。