IS_MEMBER (Transact-SQL)

適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

現在のユーザーが、指定した Microsoft Windows グループ、Microsoft Entra グループ、または SQL Server データベース ロールのメンバーであるかどうかを示します。

IS_MEMBER関数は、Microsoft Entra グループでサポートされています。 IS_MEMBERが機能しない 1 つのケースは、グループが SQL インスタンスの Microsoft Entra 管理者である場合です。

Transact-SQL 構文表記規則

Note

Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。

構文

IS_MEMBER ( { 'group' | 'role' } )  

引数

' group '
適用対象: SQL Server 2008 (10.0.x) 以降

チェック対象の Windows または Microsoft Entra グループの名前を指定します。 Windows グループは、 Domain\Group の形式である必要があります。 グループsysnameです。

' role '
名前を指定します、 SQL Server チェックされるロールです。 ロールsysname 、データベース ロールまたはユーザー定義のロールがサーバーの役割ではないの固定を含めることができます。

戻り値の型

int

解説

IS_MEMBER は、次の値を返します。

戻り値 説明
0 現在のユーザーは、 group または role のメンバーではありません。
1 現在のユーザーのメンバーである グループ または ロール.
NULL group または role が無効です。 SQL Server ログインや、アプリケーション ロールを使用しているログインでクエリを実行した場合、Windows グループに対しては NULL が返されます。

IS_MEMBER は、Windows によって作成されたアクセス トークンを調べることによって Windows グループ メンバーシップを決定します。 アクセス トークンには、ユーザーが SQL Server のインスタンスに接続した後に行われるグループ メンバーシップの変更は反映されません。 Windows グループ メンバーシップは、SQL Server ログインまたは SQL Server アプリケーション ロールでは照会できません。

データベース ロールのメンバーを追加および削除するには、ALTER ROLE (Transact-SQL) を使用します。 データベース ロールのメンバーを追加および削除するには、ALTER SERVER ROLE (Transact-SQL) を使用します。

この関数で評価されるのはロールのメンバーシップであって、基になる権限ではありません。 たとえば、 db_owner 固定データベース ロールには、 CONTROL DATABASE 権限です。 ユーザーが CONTROL DATABASE アクセス許可を持っていてもロールのメンバーではない場合、この関数は、ユーザーが同じアクセス許可を持っていても、ユーザーが db_owner ロールのメンバーではないことを正しく報告します。

メンバー、 sysadmin を入力として、すべてのデータベースの固定サーバー ロール、 dbo ユーザーです。 メンバーに対するアクセス許可のチェック、 sysadmin 固定サーバー ロールのアクセス許可を確認する dbo, 、元のログインではありません。 dboはデータベース ロールに追加できないため、Windows グループには存在しません。dbo は常に 0 (ロールが存在しない場合は NULL) を返します。

別の SQL Server ログインがデータベース ロールのメンバーかどうかを判断するには、IS_ROLEMEMBER (Transact-SQL) を使用します。 SQL Server ログインがサーバー ロールのメンバーかどうかを判断するには、IS_SRVROLEMEMBER (Transact-SQL) を使用します。

次の例は、現在のユーザーがデータベース ロールまたは Windows ドメイン グループのメンバーであるかどうかを確認します。

-- Test membership in db_owner and print appropriate message.  
IF IS_MEMBER ('db_owner') = 1  
   PRINT 'Current user is a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') = 0  
   PRINT 'Current user is NOT a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') IS NULL  
   PRINT 'ERROR: Invalid group / role specified';  
GO  
  
-- Execute SELECT if user is a member of ADVWORKS\Shipping.  
IF IS_MEMBER ('ADVWORKS\Shipping') = 1  
   SELECT 'User ' + USER + ' is a member of ADVWORKS\Shipping.';   
GO  

参照

IS_SRVROLEMEMBER (Transact-SQL)
プリンシパル (データベース エンジン)
セキュリティ カタログ ビュー (Transact-SQL)
セキュリティ関数 (Transact-SQL)