IS_SRVROLEMEMBER (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Указывает, является ли имя входа 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.

Примечание.

Хотя имена входа Microsoft Entra находятся в общедоступной предварительной версии для База данных SQL Azure и Azure Synapse, использование субъекта Microsoft Entra для входа не поддерживается.

Типы возвращаемых данных

int

Возвращаемое значение Description
0 имя входа не является членом роли.

В Базе данных SQL Azure этот оператор всегда возвращает значение 0.
1 login является членом роли role.
NULL роль или имя входа недопустимо или у вас нет разрешения на просмотр членства в роли.

Замечания

Используйте IS_SRVROLEMEMBER, чтобы определить, может ли текущий пользователь выполнять действие, требующее разрешений роли сервера.

Если для аргумента login определено имя входа Windows, например Contoso\Mary5, то функция IS_SRVROLEMEMBER возвращает значение NULL, если имени входа не предоставлен или не запрещен прямой доступ к SQL Server.

Если необязательный параметр входа не указан и если вход является именем входа в домен Windows, он может быть членом предопределенных ролей сервера через членство в группе Windows. Чтобы решить проблему косвенного членства, функция IS_SRVROLEMEMBER запрашивает у контроллера домена сведения о членстве в группах Windows. Если контроллер домена недоступен или не отвечает, IS_SRVROLEMEMBER возвращает сведения о членстве в роли, учитывая пользователя и только его локальные группы. Если указанный пользователь не является текущим пользователем, значение, возвращаемое IS_SRVROLEMEMBER, может отличаться от последнего обновления данных в SQL Server (например, Active Directory).

Если указан необязательный параметр входа, имя входа Windows, запрашиваемое, должно присутствовать в sys.server_principals или IS_SRVROLEMEMBER возвращает значение NULL. Это означает, что имя входа недопустимо.

Если параметром входа является имя входа домена или имя, основанное на группе Windows, и контроллер домена недоступен, то вызовы функции IS_SRVROLEMEMBER завершатся ошибкой и могут вернуть неверные или неполные данные.

Если контроллер домена недоступен, вызов IS_SRVROLEMEMBER возвращает точную информацию, когда субъект Windows может пройти проверку подлинности локально, например локальную учетную запись Windows или имя входа SQL Server.

IS_SRVROLEMEMBER всегда возвращает значение 0, если группа Windows используется как аргумент имени входа, а сама группа при этом является членом другой группы Windows, которая, в свою очередь, является членом указанной роли сервера.

Параметр контроля учетных записей (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');  

См. также

IS_MEMBER (Transact-SQL)
Функция безопасности (Transact-SQL)