Руководство: Создание и использование имен входа на сервере Microsoft Entra

Применимо к:База данных SQL AzureУправляемый экземпляр SQL AzureAzure Synapse Analytics (только выделенные пулы SQL)

В этой статье описывается создание и использование имен входа, поддерживаемых идентификатором Microsoft Entra (ранее Azure Active Directory) в виртуальной master базе данных SQL Azure.

В этом руководстве описано следующее:

  • Создайте имя входа Microsoft Entra в виртуальной базе данных master с новым расширением синтаксиса в Базе данных SQL Azure
  • Создайте пользователя, сопоставленного с учетной записью входа Microsoft Entra в виртуальной базе данных master
  • Использование синтаксиса WITH OBJECT_ID для неуниковых отображаемых имен
  • Предоставление ролей сервера пользователю Microsoft Entra
  • Отключение имени входа Microsoft Entra

Предварительные требования

Примечание.

Для организаций, имеющих дело с неуникными отображаемыми именами в идентификаторе Microsoft Entra ID (особенно для субъектов-служб), убедитесь, что у вас есть сведения об идентификаторе объекта для всех субъектов-служб, для которых планируется создать имена входа. Расширение синтаксиса WITH OBJECT_ID может помочь устранить эти сценарии.

Создание входа Microsoft Entra

  1. Создайте имя входа в Базе данных SQL Azure для учетной записи Microsoft Entra. В нашем примере мы будем использовать bob@contoso.com, который существует в нашем домене Microsoft Entra под названием contoso. Имя входа также можно создать из группы Microsoft Entra или субъекта-службы (приложения). Например, это группа Microsoft Entra, mygroup состоящая из учетных записей Microsoft Entra, которые являются членом этой группы. Дополнительные сведения см. в статье CREATE LOGIN (Transact-SQL).

    Примечание.

    Первая учетная запись Microsoft Entra для входа должна быть создана администратором Microsoft Entra. В роли администратора Microsoft Entra могут выступать пользователь или группа Microsoft Entra. Учетная запись SQL не может создавать учетные записи Microsoft Entra.

    Совет

    При возникновении проблем с неуникными именами в идентификаторе Microsoft Entra можно использовать расширение синтаксиса WITH OBJECT_ID . Эта функция особенно полезна для субъектов-служб с повторяющимися отображаемыми именами. Рассмотрим пример.

    CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
      WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'
    

    Дополнительные сведения см. в разделе входа Microsoft Entra и пользователей с неуникными отображаемыми именами.

  2. С помощью SQL Server Management Studio (SSMS) войдите в База данных SQL с помощью учетной записи администратора Microsoft Entra, настроенной для сервера.

  3. Разверните базы данных, затем,>,, а также системные базы данных. Щелкните правой кнопкой мыши базу данных master и выберите создать запрос, чтобы открыть новое окно запроса в контексте базы данных master.

  4. Выполните приведенный ниже запрос:

    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  5. Проверьте созданный логин в sys.server_principals. Выполните следующий запрос:

    SELECT name, type_desc, type, is_disabled
    FROM sys.server_principals
    WHERE type_desc like 'external%'
    

    Выходные данные должны выглядеть так:

    Name                            type_desc       type   is_disabled
    bob@contoso.com                 EXTERNAL_LOGIN  E      0
    
  6. Имя входа bob@contoso.com было создано в виртуальной master базе данных.

Создать пользователя на основе учетной записи Microsoft Entra

  1. Теперь, когда мы создали логин Microsoft Entra, мы можем создать пользователя Microsoft Entra на уровне базы данных, сопоставленного с логином Microsoft Entra в виртуальной базе данных master. Мы будем продолжать использовать наш пример, чтобы создать пользователя в виртуальной bob@contoso.com базе данных, master так как мы хотим продемонстрировать добавление пользователя в специальные роли. Только администратор Microsoft Entra или администратор SQL Server могут создавать пользователей в виртуальной master базе данных.

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

    CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
    

    Совет

    Хотя не требуется использовать псевдонимы пользователей Microsoft Entra (например, bob@contoso.com), рекомендуется использовать тот же псевдоним для пользователей Microsoft Entra и имен входа Microsoft Entra.

    Если необходимо создать пользователя непосредственно из внешнего источника с определенным идентификатором объекта (например, для устранения проблем с неуникальным отображаемым именем), можно также использовать следующее:

    CREATE USER [user_name] FROM EXTERNAL PROVIDER 
      WITH OBJECT_ID = 'objectid'
    
  3. Проверьте созданного пользователя в sys.database_principals. Выполните следующий запрос:

    SELECT name, type_desc, type
    FROM sys.database_principals
    WHERE type_desc like 'external%'
    

    Выходные данные должны выглядеть так:

    Name                            type_desc       type
    bob@contoso.com                 EXTERNAL_USER   E
    

Примечание.

Существующий синтаксис для создания пользователя Microsoft Entra без имени входа Microsoft Entra по-прежнему поддерживается. При выполнении следующего синтаксиса создается пользователь, содержащийся в определенной базе данных, к которую вы подключены. Важно отметить, что этот пользователь не связан ни с каким-либо входом, даже если вход с таким именем существует в виртуальной master базе данных.

Например, CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER.

Вы можете создать вход в Microsoft Entra с помощью субъекта-службы с неуникальным отображаемым именем. Дополнительные сведения см. в статье Входы и пользователи Microsoft Entra с неуникальными отображаемыми именами

Предоставьте роли уровня сервера учетным записям для входа Microsoft Entra

Можно добавить имена входа в фиксированные роли уровня сервера, например роль ##MS_DefinitionReader###, ##MS_ServerStateReader###или роль ##MS_ServerStateManager### в базе данных master.

Примечание.

Упомянутые здесь роли уровня сервера не поддерживаются для групп Microsoft Entra.

ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateManager## ADD MEMBER [AzureAD_object];

Разрешения вступают в силу только после повторного подключения пользователя. Также очистите кэш DBCC:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Чтобы проверить, какие имена входа Microsoft Entra являются частью ролей уровня сервера, выполните следующий запрос:

SELECT roles.principal_id AS RolePID,roles.name AS RolePName,
       server_role_members.member_principal_id AS MemberPID, members.name AS MemberPName
       FROM sys.server_role_members AS server_role_members
       INNER JOIN sys.server_principals AS roles
       ON server_role_members.role_principal_id = roles.principal_id
       INNER JOIN sys.server_principals AS members
       ON server_role_members.member_principal_id = members.principal_id;

Предоставление специальных ролей пользователям Microsoft Entra

Специальные роли для База данных SQL можно назначать пользователям в виртуальной master базе данных.

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

Чтобы назначить пользователю роль, можно выполнить следующий запрос:

ALTER ROLE [dbmanager] ADD MEMBER [AzureAD_object]

Чтобы удалить пользователя из роли, выполните следующий запрос:

ALTER ROLE [dbmanager] DROP MEMBER [AzureAD_object]

AzureAD_object может быть пользователем Microsoft Entra, группой или субъектом-службой в идентификаторе Microsoft Entra.

В этом примере мы создали пользователя bob@contoso.com. Давайте назначим пользователю роли dbmanager и loginmanager.

  1. Выполните приведенный ниже запрос:

    ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com]
    ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
    
  2. Проверьте назначение роли базы данных, выполнив следующий запрос:

    SELECT DP1.name AS DatabaseRoleName,
      isnull (DP2.name, 'No members') AS DatabaseUserName
    FROM sys.database_role_members AS DRM
    RIGHT OUTER JOIN sys.database_principals AS DP1
      ON DRM.role_principal_id = DP1.principal_id
    LEFT OUTER JOIN sys.database_principals AS DP2
      ON DRM.member_principal_id = DP2.principal_id
    WHERE DP1.type = 'R'and DP2.name like 'bob%'
    

    Выходные данные должны выглядеть так:

    DatabaseRoleName       DatabaseUserName
    dbmanager              bob@contoso.com
    loginmanager           bob@contoso.com
    

Необязательно — отключить вход

Синтаксис DDL ALTER LOGIN (Transact-SQL) можно использовать для включения или отключения имени входа Microsoft Entra в База данных SQL Azure.

ALTER LOGIN [bob@contoso.com] DISABLE

Чтобы изменения DISABLE или ENABLE были применены мгновенно, необходимо очистить кэш аутентификации и кэш TokenAndPermUserStore с помощью следующих команд T-SQL:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Убедитесь, что учетная запись отключена, выполнив следующий запрос:

SELECT name, type_desc, type
FROM sys.server_principals
WHERE is_disabled = 1

Например, это можно использовать, чтобы разрешить доступ только для чтения к георепликам, но запретить подключение к основному серверу.