SETUSER (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
固定サーバー ロール sysadmin のメンバーまたはデータベースの所有者が、別のユーザーの権限を借用できるようにします。
重要
SETUSER は旧バージョンとの互換性のためだけに用意されています。 SETUSER は、将来の SQL Server リリースではサポートされない可能性があります。 代わりに EXECUTE AS を使用することをお勧めします。
構文
SETUSER [ 'username' [ WITH NORESET ] ]
引数
' 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
の権限を借用し、ユーザー joe
に computer_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)