Функция IS_SRVROLEMEMBER (Transact-SQL)
Указывает, является ли данное имя входа SQL Server членом указанной предопределенной роли сервера.
Синтаксис
IS_SRVROLEMEMBER ( 'role' [ ,'login' ] )
Аргументы
'role'
Имя роли сервера, проверяемой в данный момент. Аргумент role имеет тип sysname.К допустимым значениям аргумента role относятся следующие:
sysadmin
dbcreator
bulkadmin
diskadmin
processadmin
serveradmin
setupadmin
securityadmin
'login'
Имя входа SQL Server, которое необходимо проверить. Аргумент login имеет тип sysname и значение NULL по умолчанию. Если значение не было указано, то результат будет основан на текущем контексте выполнения.
Возвращаемые типы
int
Замечания
Функция IS_SRVROLEMEMBER возвращает следующие значения.
Возвращаемое значение |
Описание |
---|---|
0 |
Аргумент login не является членом аргумента role. |
1 |
Аргумент login является членом аргумента role. |
NULL |
Недопустимое значение аргумента role или аргумента login. |
С помощью данной функции определяется, может ли текущий пользователь выполнить действие, требующее разрешений роли сервера.
Если в качестве параметра login указано имя входа Windows, например Contoso\Mary5, функция IS_SRVROLEMEMBER возвращает значение NULL, если имени входа не будет явно предоставлен или запрещен доступ к SQL Server.
Если не указан необязательный параметр имени входа и в качестве имени входа используется имя входа для домена 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).
Контроль учетных записей Windows Vista и Windows Server 2008 также может возвращать разные результаты. Это зависит от того, обращался ли пользователь к серверу в качестве члена группы Windows или как определенный пользователь SQL Server. Дополнительные сведения о контроле учетных записей см. в разделе Как подключиться к SQL Server из Windows Vista.
Эта функция оценивает членство в роли, а не базовое разрешение. Например, предопределенная роль сервера sysadmin имеет разрешение CONTROL SERVER. Если пользователь имеет разрешение CONTROL SERVER, но не является членом роли sysadmin, эта функция правильно сообщит о том, что пользователь не входит в эту роль, хотя обладает эквивалентными разрешениями.
Примеры
В следующем примере показано, является ли имя входа 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.'
См. также