IS_SRVROLEMEMBER (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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

Transact-SQL 構文表記規則

構文

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

Note

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

引数

'role'
確認するサーバー ロールの名前です。 rolesysnameです。

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

  • [sysadmin]
  • serveradmin
  • dbcreator
  • setupadmin
  • bulkadmin
  • securityadmin
  • diskadmin
  • public
  • processadmin

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

戻り値の型

int

戻り値 説明
0 loginrole のメンバーではありません。

Azure SQL Database では、このステートメントは常に 0 を返します。
1 loginrole のメンバーです。
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 を返します。

ユーザー アカウント制御 (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)