Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо:База данных 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
Примечание.
Субъекты сервера Microsoft Entra (имена входа) в настоящее время находятся в общедоступной предварительной версии для База данных SQL Azure. Управляемый экземпляр Azure SQL и SQL Server 2022 и более поздние версии уже могут использовать имена входа 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 Entracontoso. Имя входа также можно создать из группы 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 logins and users with nonunique display name
Предоставление ролей на уровне сервера именам входа 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
Вариант использования — разрешить доступ только для чтения к георепликам, но запретить подключение на сервере-источнике.