Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:База данных SQL Azure
Управляемый экземпляр SQL Azure
Azure 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
Предварительные требования
- База данных 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 ID (особенно для субъектов-служб), убедитесь, что у вас есть сведения об идентификаторе объекта для всех субъектов-служб, для которых планируется создать имена входа. Расширение синтаксиса WITH OBJECT_ID может помочь устранить эти сценарии.
Создание входа Microsoft Entra
Создайте имя входа в Базе данных 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 и пользователей с неуникными отображаемыми именами.
С помощью SQL Server Management Studio (SSMS) войдите в База данных SQL с помощью учетной записи администратора Microsoft Entra, настроенной для сервера.
Разверните базы данных, затем,>,, а также системные базы данных. Щелкните правой кнопкой мыши базу данных
masterи выберите создать запрос, чтобы открыть новое окно запроса в контексте базы данных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. Мы будем продолжать использовать наш пример, чтобы создать пользователя в виртуальнойbob@contoso.comбазе данных,masterтак как мы хотим продемонстрировать добавление пользователя в специальные роли. Только администратор Microsoft Entra или администратор SQL Server могут создавать пользователей в виртуальнойmasterбазе данных.Мы по-прежнему используем виртуальную
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'Проверьте созданного пользователя в
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.
Выполните приведенный ниже запрос:
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
Например, это можно использовать, чтобы разрешить доступ только для чтения к георепликам, но запретить подключение к основному серверу.