Руководство. Создание и использование имен входа сервера Microsoft Entra
Применимо: База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics (только выделенные пулы SQL)
В этой статье описывается создание и использование имен входа, поддерживаемых идентификатором Microsoft Entra (ранее Azure Active Directory) в виртуальной master
базе данных SQL Azure.
В этом руководстве описано следующее:
- Создание имени входа Microsoft Entra в виртуальной
master
базе данных с новым расширением синтаксиса для База данных SQL Azure - Создание пользователя, сопоставленного с именем входа Microsoft Entra в виртуальной
master
базе данных - Предоставление ролей сервера пользователю Microsoft Entra
- Отключение имени входа Microsoft Entra
Примечание.
Субъекты сервера Microsoft Entra (имена входа) в настоящее время находятся в общедоступной предварительной версии для База данных SQL Azure. Управляемый экземпляр SQL Azure уже может использовать имена входа Microsoft Entra.
Необходимые компоненты
- База данных SQL или Управляемый экземпляр SQL с базой данных. См. Краткое руководство. Создание отдельной базы данных в Базе данных SQL Azure, если вы еще не создали Базу данных SQL Azure, или Краткое руководство. Создание Управляемого экземпляра SQL Azure.
- Проверка подлинности Microsoft Entra настроена для База данных SQL или Управляемый экземпляр SQL. Дополнительные сведения см. в разделе о настройке и администрировании проверки подлинности Microsoft Entra с помощью Azure SQL.
- В этой статье описывается создание имени входа Microsoft Entra и пользователя в виртуальной
master
базе данных. Только администратор Microsoft Entra может создать пользователя в виртуальнойmaster
базе данных, поэтому мы рекомендуем использовать учетную запись администратора Microsoft Entra при работе с этим руководством. Субъект Microsoft Entra сloginmanager
ролью может создать имя входа, но не пользователь в виртуальнойmaster
базе данных.
Создание имени входа Microsoft Entra
Создайте База данных SQL Azure имя входа для учетной записи Microsoft Entra. В нашем примере мы будем использовать
bob@contoso.com
это имя в домене Microsoft Entracontoso
. Имя входа также можно создать из группы Microsoft Entra или субъекта-службы (приложения). Например, это группа Microsoft Entra,mygroup
состоящая из учетных записей Microsoft Entra, которые являются членом этой группы. Дополнительные сведения см. в статье CREATE LOGIN (Transact-SQL).Примечание.
Первое имя входа Microsoft Entra должно быть создано администратором Microsoft Entra. Администратор Microsoft Entra может быть пользователем или группой Microsoft Entra. Имя входа SQL не может создавать имена входа Microsoft Entra.
С помощью SQL Server Management Studio (SSMS) войдите в База данных SQL с помощью учетной записи администратора Microsoft Entra, настроенной для сервера.
Выполните приведенный ниже запрос:
Use master CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER GO
Проверьте созданное имя для входа в
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
Имя входа
bob@contoso.com
было создано в виртуальнойmaster
базе данных.
Создание пользователя из имени входа Microsoft Entra
Теперь, когда мы создали имя входа Microsoft Entra, мы можем создать пользователя Microsoft Entra уровня базы данных, сопоставленного с именем входа Microsoft Entra в виртуальной
master
базе данных. Мы будем продолжать использовать наш пример, чтобы создать пользователя в виртуальнойmaster
базе данных,bob@contoso.com
так как мы хотим продемонстрировать добавление пользователя в специальные роли. Только администратор Microsoft Entra или администратор SQL Server могут создавать пользователей в виртуальнойmaster
базе данных.Мы используем виртуальную
master
базу данных, но вы можете переключиться на базу данных, если вы хотите создать пользователей в других базах данных. Выполните следующий запрос.Use master CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
Совет
Хотя не требуется использовать псевдонимы пользователей Microsoft Entra (например,
bob@contoso.com
), рекомендуется использовать тот же псевдоним для пользователей Microsoft Entra и имен входа Microsoft Entra.Проверьте созданного пользователя в
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 logins and users with nonunique display name
Предоставление ролей на уровне сервера именам входа Microsoft Entra
Можно добавить имена входа в фиксированные роли уровня сервера, например роль ##MS_DefinitionReader#, ##MS_ServerStateReader## или ##MS_ServerStateManager### .
Примечание.
Упомянутые здесь роли уровня сервера не поддерживаются для групп 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.
Выполните приведенный ниже запрос:
ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com] ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
Проверьте назначение роли базы данных, выполнив следующий запрос:
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
Вариант использования — разрешить доступ только для чтения к георепликам, но запретить подключение на сервере-источнике.