IS_SRVROLEMEMBER (Transact-SQL)

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

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

Transact-SQL 構文表記規則

構文

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

Note

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

引数

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

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

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

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

Note

Microsoft Entra ログインは Azure SQL Database と Azure Synapse のパブリック プレビュー段階ですが、ログインに Microsoft Entra プリンシパルを使用することはサポートされていません。

戻り値の型

int

戻り値 説明
0 login はロールメンバーではありません。

Azure SQL Database では、このステートメントは常に 0 を返します。
1 loginrole のメンバーです。
NULL ロール または ログイン が無効であるか、ロール メンバーシップを表示するアクセス許可がありません。

解説

IS_SRVROLEME MB (メガバイト)ER を使用して、現在のユーザーがサーバー ロールのアクセス許可を必要とするアクションを実行できるかどうかを判断します。

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

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

省略可能なログイン パラメーターが指定されている場合は、クエリ対象の Windows ログインがsys.server_principalsに存在する必要があります。または、IS_SRVROLEME MB (メガバイト)ER は NULL を返します。 これは、ログインが無効であることを示します。

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

doメイン コントローラーを使用できない場合、IS_SRVROLEME MB (メガバイト)ER の呼び出しは、ローカルの Windows アカウントや SQL Server ログインなど、Windows プリンシパルをローカルで認証できる場合に正確な情報を返します。

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

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

この関数で評価されるのはロールのメンバーシップであって、基になる権限ではありません。 たとえば、sysadmin 固定サーバー ロールには CONTROL SERVER 権限があります。 ユーザーが CONTROL Standard Edition RVER アクセス許可を持っていても、ロールのメンバーではない場合、この関数は、ユーザーが同じアクセス許可を持っていても、ユーザーが sysadmin ロールのメンバーではないことを正しく報告します。

現在のユーザーが、指定した Windows グループ、Microsoft Entra グループ、または SQL Server データベース ロールのメンバーであるかどうかを確認するには、IS_ME MB (メガバイト)ER (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)