Функция IS_SRVROLEMEMBER (Transact-SQL)

Указывает, является ли данное имя входа SQL Server членом указанной предопределенной роли сервера.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )

Аргументы

  • 'role'
    Имя роли сервера, проверяемой в данный момент. Аргумент role имеет тип sysname.

    К допустимым значениям аргумента role относятся:

    • sysadmin

    • dbcreator

    • bulkadmin

    • diskadmin

    • processadmin

    • serveradmin

    • setupadmin

    • securityadmin

  • 'login'
    Имя входа SQL Server, которое необходимо проверить. Аргумент login имеет тип sysname и значение NULL по умолчанию. Если значение не было указано, то результат будет основан на текущем контексте выполнения. Если содержит слово NULL, возвращается значение NULL.

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

int

Замечания

Функция IS_SRVROLEMEMBER возвращает следующие значения.

Возвращаемое значение

Описание

0

Аргумент login не является членом аргумента role.

1

Аргумент login является членом аргумента role.

NULL

Недопустимое значение аргумента role или аргумента login.

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

Если такое имя входа Windows, как Contoso\Mary5, указано для login, то 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).

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

Контроль учетных записей (UAC) в 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.'