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)