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


IS_MEMBER (Transact-SQL)

Относится к:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsСистема аналитической платформы (PDW)SQL база данных в Microsoft Fabric

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

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

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

Примечание.

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

Синтаксис

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

Аргументы

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