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


IS_MEMBER (Transact-SQL)

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

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