Share via


IS_SRVROLEMEMBER (Transact-SQL)

SQL Server ログインが、指定したサーバー ロールのメンバーであるかどうかを示します。

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

構文

IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )

引数

  • ' role '
    確認するサーバー ロールの名前です。 role のデータ型は sysname です。

    role の有効な値は、ユーザー定義サーバー ロールと、次の固定サーバー ロールです。

    sysadmin

    serveradmin

    dbcreator

    setupadmin

    bulkadmin

    securityadmin

    diskadmin

    public

    processadmin

     

  • ' login '
    確認する SQL Server ログインの名前です。login のデータ型は sysname で、既定値は NULL です。 値を指定しない場合、結果は現在の実行コンテキストに基づきます。 パラメーターに "NULL" という語が含まれていると、NULL が返されます。

戻り値の型

int

戻り値

説明

0

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

1

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

NULL

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

説明

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

Contoso\Mary5 などの Windows ログインを login に指定した場合、IS_SRVROLEMEMBER は、そのログインに SQL Server への直接アクセスが許可または拒否されている場合を除き、NULL を返します。

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

省略可能な login パラメーターを指定する場合は、クエリの対象となる Windows ログインが sys.server_principals に存在する必要があります。存在しない場合、IS_SRVROLEMEMBER は NULL を返します。 これは、そのログインが無効であることを示します。

login パラメーターがドメイン ログインか、Windows グループに基づくログインである場合、ドメイン コントローラーにアクセスできないと、IS_SRVROLEMEMBER の呼び出しが失敗し、不正確なデータや不完全なデータが返される可能性があります。

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

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

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

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

関連する関数

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

権限

サーバー ロールに対する VIEW DEFINITION 権限が必要です。

使用例

次の例では、現在のユーザーの SQL Server ログインが固定サーバー ロール sysadmin のメンバーであるかどうかを示しています。

IF IS_SRVROLEMEMBER ('sysadmin') = 1
   print 'Current user''s login is a member of the sysadmin role'
ELSE IF IS_SRVROLEMEMBER ('sysadmin') = 0
   print 'Current user''s login is NOT a member of the sysadmin role'
ELSE IF IS_SRVROLEMEMBER ('sysadmin') IS NULL
   print 'ERROR: The server role specified is not valid.'

次の例では、ドメイン ログイン Pat が固定サーバー ロール diskadmin のメンバーであるかどうかを示しています。

SELECT IS_SRVROLEMEMBER('diskadmin', 'Contoso\Pat');

関連項目

参照

IS_MEMBER (Transact-SQL)

セキュリティ関数 (Transact-SQL)