Поделиться через


Функция 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 по умолчанию. Если значение не было указано, то результат будет основан на текущем контексте выполнения.

Возвращаемые типы

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.'