次の方法で共有


SETUSER (Transact-SQL)

適用対象: SQL Server Azure 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)