Функция IS_SRVROLEMEMBER (Transact-SQL)
Указывает, является ли данное имя входа 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.
Типы возвращаемых данных
int
Возвращаемое значение |
Описание |
---|---|
0 |
Аргумент login не является членом аргумента role. |
1 |
Аргумент login является членом аргумента role. |
NULL |
Аргумент role или login недопустим, либо у вас нет разрешения на просмотр членства в роли. |
Замечания
Функция IS_SRVROLEMEMBER определяет, может ли текущий пользователь выполнить действие, требующее разрешений роли сервера.
Если имя входа Windows, например Contoso\Mary5, указано в качестве параметра login, то функция IS_SRVROLEMEMBER возвращает значение NULL, если только имени входа не был явно предоставлен или запрещен доступ к SQL Server.
Если не указан необязательный параметр login и в качестве параметра login используется имя входа для домена Windows, то оно может быть членом предопределенной роли сервера за счет членства в группе Windows. Чтобы решить проблему косвенного членства, функция IS_SRVROLEMEMBER запрашивает у контроллера домена сведения о членстве в группах Windows. Если контроллер домена недоступен или не отвечает, то функция IS_SRVROLEMEMBER возвращает сведения о членстве в роли, принимая во внимание только учетную запись пользователя и локальные группы. Если указанный пользователь не является текущим пользователем, то значение, возвращаемое функцией IS_SRVROLEMEMBER, может отличаться от значения в структуре проверки подлинности (например, Active Directory), полученного SQL Server при последнем обновлении данных.
Если указан необязательный параметр входа, то запрашиваемое имя входа Windows должно присутствовать в представлении каталога sys.server_principals. В противном случае функция IS_SRVROLEMEMBER вернет значение NULL. Это свидетельствует о недопустимости имени входа.
Если параметром входа является имя входа домена или имя, основанное на группе Windows, и контроллер домена недоступен, то вызовы функции IS_SRVROLEMEMBER завершатся ошибкой и могут вернуть неверные или неполные данные.
Если контроллер домена недоступен, то вызов функции IS_SRVROLEMEMBER возвратит правильные данные при условии, что проверку подлинности участника Windows можно выполнить локально (например, для локальной учетной записи Windows или имени входа SQL Server).
IS_SRVROLEMEMBER всегда возвращает значение 0, если группа Windows используется как аргумент имени входа, а сама группа при этом является членом другой группы Windows, которая в свою очередь является членом указанной роли сервера.
Контроль учетных записей в Windows Vista и Windows Server 2008 также может возвращать различные результаты. Они зависят от того, подключился пользователь к серверу как член группы Windows или как определенный пользователь SQL Server.
Эта функция вычисляет членство в роли, а не базовое разрешение. Например, у предопределенной роли сервера sysadmin имеется разрешение CONTROL SERVER. Если у пользователя есть разрешение CONTROL SERVER, но он не является членом этой роли, то эта функция справедливо сообщает, что этот пользователь не является членом роли sysadmin даже несмотря на то, что имеет те же разрешения.
Связанные функции
Чтобы определить, является ли текущий пользователь членом указанной группы Windows или роли базы данных 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');