IS_MEMBER (Transact-SQL)

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

Указывает, является ли текущий пользователь членом указанной группы Microsoft Windows, группы Microsoft Entra или роли базы данных SQL Server.

Функция IS_ME МБ ER поддерживается для групп Microsoft Entra. Один из случаев, когда IS_ME МБ ER не работает, заключается в том, что группа является администратором Microsoft Entra для экземпляра SQL.

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

Примечание.

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

Синтаксис

IS_MEMBER ( { 'group' | 'role' } )  

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

'group'
Область применения: SQL Server 2008 (10.0.x) и более поздних версий

Имя группы Windows или Microsoft Entra, которая проверка. Группа Windows должна находиться в формате группы доменов\. Аргумент group имеет тип sysname.

'role'
Имя роли SQL Server, которая проверка. Аргумент role имеет тип sysname и может содержать предопределенные роли базы данных или пользовательские роли, но не роли сервера.

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

int

Замечания

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

Возвращаемое значение Description
0 Текущий пользователь не является членом группы или роли.
1 Текущий пользователь является членом группы group или роли role.
NULL Недействителен либо группа, либо роль. При запросе имени входа SQL Server или имени входа с помощью роли приложения возвращает значение NULL для группы Windows.

Функция IS_MEMBER определяет членство в группе Windows, проверяя токен доступа, созданный Windows. Маркер доступа не отражает изменения в членстве в группах, которые вносятся после подключения пользователя к экземпляру SQL Server. Членство в группах Windows не может запрашиваться именем входа SQL Server или ролью приложения SQL Server.

Для добавления членов в роль базы данных и удаления членов из нее используйте инструкцию ALTER ROLE (Transact-SQL). Для добавления членов в роль сервера и удаления членов из нее используйте инструкцию ALTER SERVER ROLE (Transact-SQL).

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

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

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

Примеры

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

-- Test membership in db_owner and print appropriate message.  
IF IS_MEMBER ('db_owner') = 1  
   PRINT 'Current user is a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') = 0  
   PRINT 'Current user is NOT a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') IS NULL  
   PRINT 'ERROR: Invalid group / role specified';  
GO  
  
-- Execute SELECT if user is a member of ADVWORKS\Shipping.  
IF IS_MEMBER ('ADVWORKS\Shipping') = 1  
   SELECT 'User ' + USER + ' is a member of ADVWORKS\Shipping.';   
GO  

См. также

IS_SRVROLEMEMBER (Transact-SQL)
Субъекты (ядро СУБД)
Представления каталога безопасности (Transact-SQL)
Функция безопасности (Transact-SQL)