EXECUTE AS と SETUSER

SQL Server 2005 では、文字列、コマンド、またはモジュールが実行されるコンテキストを、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 ステートメントを使用します。

参照

概念

プリンシパル

その他の技術情報

コンテキストの切り替え
EXECUTE AS (Transact-SQL)
REVERT (Transact-SQL)
SETUSER (Transact-SQL)
sys.database_principals (Transact-SQL)
sys.server_principals (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手