次の方法で共有


IS_ROLEMEMBER (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

データベース プリンシパルが指定されたデータベース ロールのメンバーであるかどうかを示します。

Transact-SQL 構文表記規則

Note

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

構文

IS_ROLEMEMBER ( 'role' [ , 'database_principal' ] )  

Note

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

引数

' role '
確認するデータベース ロールの名前を指定します。 rolesysnameです。

' database_principal '
確認するデータベース ユーザー、データベース ロール、またはアプリケーション ロールの名前です。 database_principalsysname, 、既定値は NULL です。 値を指定しない場合、結果は現在の実行コンテキストに基づきます。 パラメーターに "NULL" という語が含まれていると、NULL が返されます。

戻り値の型

int

戻り値 説明
0 database_principalrole のメンバーではありません。
1 database_principal のメンバーである ロールです。
NULL database_principal または ロール が無効であるか、ロール メンバーシップを表示するアクセス許可がありません。

解説

管理者が Microsoft Entra グループのメンバーである場合、 IS_ROLEMEMBER 関数は Microsoft Entra 管理者ではサポートされません。 IS_ROLEMEMBER関数は、そのグループが Microsoft Entra 管理者でない限り、Microsoft Entra グループのメンバーである Microsoft Entra ユーザーでサポートされます。

IS_ROLEMEMBER は、現在のユーザーがデータベース ロールの権限を必要とするアクションを実行できるかどうかを判断するために使用します。

unless the database_principal が許可または拒否された SQL Server への直接アクセスである場合を除き、database_principal が Contoso\Mary5 などの Windows ログインに基づいている場合、IS_ROLEMEMBER は NULL を返します。

省略可能な database_principal パラメーターが指定されておらず、 database_principal が Windows ドメイン ログインに基づいている場合は、Windows グループのメンバーシップを通じてデータベース ロールのメンバーになる可能性があります。 そのような間接的なメンバーシップを解決するために、IS_ROLEMEMBER は、Windows グループのメンバーシップ情報をドメイン コントローラーに要求します。 ドメイン コントローラーにアクセスできない場合、または応答しない場合、IS_ROLEMEMBERはユーザーとそのローカル グループのみを計算してロール メンバーシップ情報を返します。 指定したユーザーが現在のユーザーでない場合、IS_ROLEMEMBERによって返される値は、SQL Server に対する認証子 (Active Directory など) の最後のデータ更新とは異なる場合があります。

省略可能な database_principal パラメーターが指定されている場合、ユーザーはsys.database_principalsに存在する必要があります。または、null IS_ROLEMEMBER返します。

ときに、 database_principal パラメーターがに基づいてドメイン ログインか、Windows グループに基づく、ドメイン コント ローラーにアクセスできなくなって、IS_ROLEMEMBER の呼び出しは失敗し、不正確または不完全なデータを返す場合があります。

ドメイン コントローラーが使用できない場合、IS_ROLEMEMBERの呼び出しは、ローカルの Windows アカウントや SQL Server ログインなど、Windows プリンシパルをローカルで認証できる場合に正確な情報を返します。

IS_ROLEMEMBER は、Windows グループをデータベース プリンシパル引数として使用され、この Windows グループは、さらに、指定されたデータベース ロールのメンバー、別の Windows グループのメンバーである場合は、常に 0 を返します。

Windows Vista および Windows Server 2008 にあるユーザー アカウント制御 (UAC) も異なる結果を返す場合があります。 これは、ユーザーがサーバーに Windows グループのメンバーとしてアクセスしたか、特定の SQL Server ユーザーとしてアクセスしたかによります。

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

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

現在のユーザーが、指定した Windows グループ、Microsoft Entra グループ、または SQL Server データベース ロールのメンバーであるかどうかを確認するには、 IS_MEMBER (Transact-SQL)を使用します。 SQL Server ログインがサーバー ロールのメンバーかどうかを判断するには、IS_SRVROLEMEMBER (Transact-SQL) を使用します。

アクセス許可

データベース ロールに対する VIEW DEFINITION 権限が必要です。

次の例では、現在のユーザーが db_datareader 固定データベース ロールのメンバーであるかどうかを示しています。

IF IS_ROLEMEMBER ('db_datareader') = 1  
   print 'Current user is a member of the db_datareader role'  
ELSE IF IS_ROLEMEMBER ('db_datareader') = 0  
   print 'Current user is NOT a member of the db_datareader role'  
ELSE IF IS_ROLEMEMBER ('db_datareader') IS NULL  
   print 'ERROR: The database role specified is not valid.';  

参照

CREATE ROLE (Transact-SQL)
ALTER ROLE (Transact-SQL)
DROP ROLE (Transact-SQL)
CREATE SERVER ROLE (Transact-SQL)
ALTER SERVER ROLE (Transact-SQL)
DROP SERVER ROLE (Transact-SQL)
IS_MEMBER (Transact-SQL)
IS_SRVROLEMEMBER (Transact-SQL)
セキュリティ関数 (Transact-SQL)