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


IS_ROLEMEMBER (Transact-SQL)

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

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

Соглашения о синтаксисе Transact-SQL

Примечание.

Идентификатор Microsoft Entra ранее был известен как Azure Active Directory (Azure AD).

Синтаксис

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

Аргументы

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

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

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

int

Возвращаемое значение Description
0 database_principal не является членом роли.
1 database_principal является членом роли role.
NULL database_principal или роли недопустимы или у вас нет разрешения на просмотр членства в роли.

Замечания

Функция IS_ROLEMEMBER не поддерживается для администратора Microsoft Entra, если администратор является членом группы Microsoft Entra. Функция IS_ROLEMEMBER поддерживается для пользователей Microsoft Entra, являющихся членами группы Microsoft Entra, если эта группа не является администратором Microsoft Entra.

Чтобы определить, может ли текущий пользователь выполнить действие, требующее разрешений роли базы данных, воспользуйтесь функцией 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, может отличаться от последнего обновления данных в SQL Server (например, Active Directory).

Если указан необязательный параметр database_principal , пользователь должен существовать в sys.database_principals или IS_ROLEMEMBER возвращает значение NULL.

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

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

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

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

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

Члены предопределенной роли сервера sysadmin входят в каждую базу данных как пользователь dbo. При проверке разрешения для члена предопределенной роли сервера sysadmin проверяются разрешения для пользователя dbo, а не исходного имени для входа. Так как dbo нельзя добавить в роль базы данных и не существует в группах Windows, dbo всегда возвращает значение 0 (или NULL, если роль не существует).

Чтобы определить, является ли текущий пользователь членом указанной группы Windows, группы Microsoft Entra или роли базы данных 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)