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


IS_ROLEMEMBER (Transact-SQL)

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

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

Синтаксис

IS_ROLEMEMBER ( 'role' [ , 'database_principal' ] )

Аргументы

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

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

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

int

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

Описание

0

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

1

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

NULL

Аргумент database_principal или role недопустим, либо у вас нет разрешения на просмотр членства в роли.

Замечания

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

Если database_principal основан на имени входа Windows, например Contoso\Mary5, то функция IS_ROLEMEMBER возвращает значение NULL, если только участнику database_principal не предоставлен или не запрещен прямой доступ к SQL Server.

Если необязательный параметр database_principal не указан, а участник database_principal создан на базе имени входа домена Windows, то он может быть членом роли базы данных через членство в группе Windows. Чтобы решить проблему косвенного членства, функция IS_ROLEMEMBER запрашивает у контроллера домена сведения о членстве в группах Windows. Если контроллер домена недоступен или не отвечает, то функция IS_ROLEMEMBER возвращает сведения о членстве в роли, принимая во внимание только учетную запись пользователя и локальные группы. Если указанный пользователь не является текущим, то значение, возвращаемое функцией IS_ROLEMEMBER, может отличаться от значения в структуре проверки подлинности (например, Active Directory), полученного SQL Server при последнем обновлении данных.

Если необязательный параметр database_principal указан, то участник базы данных, для которого выполняется запрос, должен присутствовать в таблице sys.database_principals. В противном случае функция IS_ROLEMEMBER возвратит значение NULL. Это означает, что database_principal является недопустимым в этой базе данных.

Если параметр database_principal основан на имени входа домена или на группе Windows и контроллер домена недоступен, то вызовы функции IS_ROLEMEMBER завершатся ошибкой и могут вернуть неверные или неполные данные.

Если контроллер домена недоступен, то вызов функции IS_ROLEMEMBER вернет правильные данные при условии, что проверку подлинности участника Windows можно выполнить локально (например, для локальной учетной записи Windows или имени входа SQL Server).

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

Контроль учетных записей Windows Vista и Windows Server 2008 также может возвращать разные результаты. Это зависит от того, обращался ли пользователь к серверу в качестве члена группы Windows или как определенный пользователь SQL Server.

Эта функция вычисляет членство в роли, а не базовое разрешение. Например, предопределенная роль базы данных db_owner имеет разрешение CONTROL DATABASE. Если у пользователя есть разрешение CONTROL DATABASE, но он не является членом этой роли, то эта функция справедливо сообщает, что этот пользователь не является членом роли db_owner даже несмотря на то, что имеет те же разрешения.

Связанные функции

Чтобы определить, является ли текущий пользователь членом указанной группы Windows или роли базы данных SQL Server, воспользуйтесь параметром IS_MEMBER (Transact-SQL). Чтобы определить, является ли имя входа SQL Server членом роли сервера, используйте функцию Функция IS_SRVROLEMEMBER (Transact-SQL).

Разрешения

Требует разрешения VIEW DEFINITION для роли базы данных.

Примеры

В следующем примере определяется принадлежность имени входа текущего пользователя к предопределенной роли базы данных db_datareader.

IF IS_ROLEMEMBER ('db_datareader') = 1
   print 'Current user is a member of the db_datareader role'
ELSE IF IS_ROLEMEMBER ('db_datareader') = 0
   print 'Current user is NOT a member of the db_datareader role'
ELSE IF IS_ROLEMEMBER ('db_datareader') IS NULL
   print 'ERROR: The database role specified is not valid.'

См. также

Справочник

CREATE ROLE (Transact-SQL)

ALTER ROLE (Transact-SQL)

DROP ROLE (Transact-SQL)

CREATE SERVER ROLE (Transact-SQL)

ALTER SERVER ROLE (Transact-SQL)

DROP SERVER ROLE (Transact-SQL)

IS_MEMBER (Transact-SQL)

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

Функции безопасности (Transact-SQL)