IS_SRVROLEMEMBER (Transact-SQL)
適用対象: SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Server ログインが、指定されたサーバー ロールのメンバーであるかどうかを示します。
構文
IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )
Note
SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。
引数
' role '
確認するサーバー ロールの名前です。 role は sysnameです。
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 のパブリック プレビュー段階ですが、 login に Microsoft Entra プリンシパルを使用することはサポートされていません 。
戻り値の型
int
戻り値 | 説明 |
---|---|
0 | login は role のメンバーではありません。 Azure SQL Database では、このステートメントは常に 0 を返します。 |
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 など) の最後のデータ更新とは異なる場合があります。
省略可能なログイン パラメーターが指定されている場合は、クエリ対象の Windows ログインがsys.server_principalsに存在する必要があります。または、IS_SRVROLEMEMBERは NULL を返します。 これは、ログインが無効であることを示します。
login パラメーターがドメイン ログインか、Windows グループに基づくログインである場合、ドメイン コントローラーにアクセスできないと、IS_SRVROLEMEMBER の呼び出しが失敗し、不正確なデータや不完全なデータが返される可能性があります。
ドメイン コントローラーを使用できない場合は、ローカルの Windows アカウントや SQL Server ログインなど、Windows プリンシパルをローカルで認証できる場合に、IS_SRVROLEMEMBERの呼び出しによって正確な情報が返されます。
Windows グループがログイン引数として使用されていて、この Windows グループが別の Windows グループのメンバーであり、さらにそのグループが指定されたサーバー ロールのメンバーである場合、IS_SRVROLEMEMBER は常に 0 を返します。
ユーザー アカウント制御 (UAC) の設定では、異なる結果が返されることもあります。 これは、ユーザーがサーバーに Windows グループのメンバーとしてアクセスしたか、特定の SQL Server ユーザーとしてアクセスしたかによります。
この関数で評価されるのはロールのメンバーシップであって、基になる権限ではありません。 たとえば、sysadmin 固定サーバー ロールには CONTROL SERVER 権限があります。 ユーザーが CONTROL SERVER アクセス許可を持っていても、ロールのメンバーではない場合、この関数は、ユーザーが同じアクセス許可を持っていても、ユーザーが sysadmin ロールのメンバーではないことを正しく報告します。
関連する関数
現在のユーザーが、指定した Windows グループ、Microsoft Entra グループ、または 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');