IS_ROLEMEMBER (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

Transact-SQL 構文表記規則

構文

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

Note

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

引数

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

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

Note

database_principal に対する Azure AD プリンシパルの使用はサポートされていません。

戻り値の型

int

戻り値 説明
0 database_principal のメンバーではない ロールです。
1 database_principal のメンバーである ロールです。
NULL database_principal または ロール が有効でないか、ロールのメンバーシップを表示する権限がありません。

解説

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

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 に存在している必要があります。そうでない場合、IS_ROLEMEMBER は NULL を返します。 これが示す、 database_principal はこのデータベースでは無効です。

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

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

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 グループまたは 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)