IS_ROLEMEMBER (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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_principalはロールメンバーではありません。
1 database_principal のメンバーである ロールです。
NULL database_principalまたはロールが無効であるか、ロール メンバーシップを表示するアクセス許可がありません。

解説

IS_ROLEME MB (メガバイト)ER 関数は、管理者が Microsoft Entra グループのメンバーである場合、Microsoft Entra 管理者ではサポートされません。 IS_ROLEME MB (メガバイト)ER 関数は、そのグループが 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 doメイン ログインに基づいている場合は、Windows グループのメンバーシップを通じてデータベース ロールのメンバーである可能性があります。 そのような間接的なメンバーシップを解決するために、IS_ROLEMEMBER は、Windows グループのメンバーシップ情報をドメイン コントローラーに要求します。 doメイン コントローラーにアクセスできない場合、または応答しない場合、IS_ROLEME MB (メガバイト)ER はユーザーとそのローカル グループのみを計算してロール メンバーシップ情報を返します。 指定したユーザーが現在のユーザーでない場合、IS_ROLEME MB (メガバイト)ER によって返される値は、SQL Server に対する認証子 (Active Directory など) の最後のデータ更新とは異なる場合があります。

省略可能なdatabase_principal パラメーターが指定されている場合、ユーザーはsys.database_principalsに存在する必要があります。または、IS_ROLEME MB (メガバイト)ER は NULL を返します。

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

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

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

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

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

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

現在のユーザーが、指定した Windows グループ、Microsoft Entra グループ、または SQL Server データベース ロールのメンバーであるかどうかを確認するには、IS_ME MB (メガバイト)ER (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)