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 ステートメントを使用します。