Учебник: Создание и использование логинов на сервер Microsoft Entra

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

Примечание.

Субъекты-серверы Microsoft Entra в настоящее время доступны в предварительной версии для Azure Synapse Analytics.

В этом руководстве вы узнаете, как:

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

Prerequisites

  • Выделенный SQL-пул и база данных Azure Synapse Analytics.
  • Настроена аутентификация Microsoft Entra для Azure Synapse Analytics. Для получения дополнительной информации смотрите «Настройка и управление аутентификацией Microsoft Entra с помощью Azure Synapse Analytics».
  • В этой статье объясняется, как создать имя входа Microsoft Entra и пользователя в виртуальной базе данных master. Только администратор Microsoft Entra может создать пользователя в виртуальной master базе данных, поэтому мы рекомендуем использовать учетную запись администратора Microsoft Entra при работе с этим руководством. Участник безопасности Microsoft Entra с ролью loginmanager может создать учетную запись для входа, но не может создать пользователя в виртуальной базе данных master.

Примечание.

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

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

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

    Примечание.

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

    Tip

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

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

    Для получения дополнительной информации см.: Соображения по названию.

  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]
    

    Tip

    Хотя не требуется использовать псевдонимы пользователей 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

Вы можете добавлять логины в фиксированные роли серверного уровня, такие как ##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

Вы можете назначать специальные роли для Azure Synapse Analytics пользователям в виртуальной 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-пуле.

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