Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Указывает, является ли имя входа 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)