次の方法で共有


IS_ROLEMEMBER (Transact-SQL)

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

トピック リンク アイコン Transact-SQL 構文表記規則

構文

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

引数

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

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

戻り値の型

int

戻り値

説明

0

database_principal は role のメンバーではない。

1

database_principal は role のメンバーである。

NULL

database_principal または role が無効か、ロールのメンバーシップを表示する権限がない。

説明

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

database_principal が Contoso\Mary5 などの Windows ログインに基づいている場合、IS_ROLEMEMBER は、その database_principal に SQL Server への直接アクセスが許可または拒否されている場合を除き、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 の呼び出しで正確な情報が返されます。

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

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

この関数で評価されるのはロールのメンバーシップであって、基になる権限ではありません。 たとえば、db_owner 固定データベース ロールには、CONTROL DATABASE 権限があります。 CONTROL DATABASE 権限を持っていても、db_owner ロールに所属していなければ、そのユーザーはロールのメンバーではないと、この関数によって正確に報告されます。そのロールと同じ権限をユーザーが持っているとしても結果は変わりません。

関連する関数

現在のユーザーが指定された 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)