SETUSER (Transact-SQL)

適用対象: SQL ServerAzure SQL Managed Instance

固定サーバー ロール sysadmin のメンバーまたはデータベースの所有者が、別のユーザーの権限を借用できるようにします。

重要

SETUSER は旧バージョンとの互換性のためだけに用意されています。 SETUSER は、将来の SQL Server リリースではサポートされない可能性があります。 代わりに EXECUTE AS を使用することをお勧めします。

Transact-SQL 構文表記規則

構文

  
SETUSER [ 'username' [ WITH NORESET ] ]   

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

'username'
権限の借用の対象となる、現在のデータベース内の SQL Server ユーザーまたは Windows ユーザーの名前です。 username を指定しない場合、ユーザーの権限を借用するシステム管理者またはデータベース所有者の元の ID 状態に戻ります。

WITH NORESET
後に username の指定されていない SETUSER ステートメントがあっても、システム管理者またはデータベース所有者の元の ID 状態にリセットされないことを指定します。

解説

固定サーバー ロール sysadmin のメンバーまたはデータベースの所有者は、SETUSER を使用して別のユーザーの ID を借用し、そのユーザーの権限をテストできます。 db_owner 固定データベース ロールのメンバーシップが十分ではありません。

SETUSER は、SQL Server ユーザーに対してだけ使用してください。 SETUSER は Windows ユーザーに対してはサポートされていません。 SETUSER を使用して別のユーザーの ID の権限を借用している場合、権限を借用しているユーザーが作成するすべてのオブジェクトは、権限を借用されているユーザーによって所有されます。 たとえば、データベース所有者が Margaret というユーザーの ID を借用し、orders というテーブルを作成する場合、orders テーブルは、システム管理者ではなく、Margaret によって所有されます。

SETUSER ステートメントは、別の SETUSER ステートメントを実行するか、現在のデータベースを USE ステートメントで変更するまで有効になります。

Note

SETUSER WITH NORESET を使用すると、データベース所有者またはシステム管理者が自分の権限を回復するには、いったんログ オフしてからもう一度ログ オンするしかありません。

アクセス許可

sysadmin 固定サーバー ロールのメンバーシップを持っているか、またはデータベースの所有者である必要があります。 db_owner 固定データベース ロールのメンバーシップでは十分ではありません。

この例では、データベース所有者が別のユーザーの ID を借用する方法を示します。 ユーザー mary は、computer_types という名前のテーブルを作成しました。 SETUSER を使用して、データベース所有者は mary の権限を借用し、ユーザー joecomputer_types テーブルへのアクセス権を与え、その後自分自身の ID をリセットします。

SETUSER 'mary';  
GO  
GRANT SELECT ON computer_types TO joe;  
GO  
--To revert to the original user  
SETUSER;  

参照

DENY (Transact-SQL)
GRANT (Transact-SQL)
REVOKE (Transact-SQL)
USE (Transact-SQL)