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)