IS_SRVROLEMEMBER (Transact-SQL)

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

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

構文

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

引数

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

    role の有効な値は次のとおりです。

    • sysadmin

    • dbcreator

    • bulkadmin

    • diskadmin

    • processadmin

    • serveradmin

    • setupadmin

    • securityadmin

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

戻り値の型

int

説明

IS_SRVROLEMEMBER は、次の値を返します。

戻り値

説明

0

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

1

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

NULL

role または login が無効。

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

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

省略可能な 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 グループがログイン引数として使用される場合、IS_SRVROLEMEMBER は常に 0 を返します。この Windows グループは、別の Windows グループのメンバーです (同様に、このグループも指定されたサーバー ロールのメンバーになります)。

Windows Vista および Windows Server 2008 にあるユーザー アカウント制御 (UAC) も異なる結果を返す場合があります。これは、ユーザーがサーバーに Windows グループのメンバーとしてアクセスしたか、特定の SQL Server ユーザーとしてアクセスしたかによります。ユーザー アカウント制御の詳細については、「Windows Vista から SQL Server に接続する方法」を参照してください。

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

次の例では、現在のユーザーの 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.'