你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文指导你在 Azure Synapse Analytics 专用 SQL 池(原 SQL DW)的虚拟 master 数据库中,创建并使用由 Microsoft Entra ID(原 Azure Active Directory)支持的登录名。 Azure Synapse Analytics 工作区中的专用 SQL 池不使用逻辑 SQL 服务器。
注意
Microsoft Entra server principals 目前在 Azure Synapse Analytics 中处于预览状态。
本教程中,您将学习如何:
- 在虚拟
master数据库中创建一个 Microsoft Entra 登录 - 在虚拟
master数据库中创建映射到 Microsoft Entra 登录的用户 - 使用
WITH OBJECT_ID语法用于非唯一显示名称 - 向 Microsoft Entra 用户授予服务器角色
- 禁用 Microsoft Entra 登录名
Prerequisites
- 一个Azure Synapse Analytics专用SQL池和一个数据库。
- 已为 Azure Synapse Analytics 配置 Microsoft Entra 身份验证。 欲了解更多信息,请参见“配置和管理使用 Azure Synapse Analytics 的 Microsoft Entra 身份验证”。
- 本文指导你在虚拟
master数据库中创建 Microsoft Entra 登录名和用户。 只有 Microsoft Entra 管理员才能在虚拟master数据库中创建用户,因此建议在完成本教程时使用 Microsoft Entra 管理员帐户。 具有loginmanager角色的 Microsoft Entra 主体可以在虚拟master数据库中创建登录名,但不能创建用户。
注意
对于在 Microsoft Entra ID 中处理非唯一显示名称的组织(特别是服务主体),请确保您拥有计划为其创建登录名的任何服务主体的对象 ID 信息。 语法 WITH OBJECT_ID 扩展可以帮助解决这些情境。
创建 Microsoft Entra 登录名
为 Microsoft Entra 帐户创建登录名。 在此示例中,使用 Microsoft Entra 域中名为
contoso的bob@contoso.com。 你也可以从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'更多信息请参见 命名注意事项。
使用 SQL Server Management Studio(SSMS),用 Microsoft Entra 管理员账户登录你的专用 SQL 池。
展开数据库>系统数据库。 右键单击
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 0bob@contoso.com登录名是在虚拟master数据库中创建的。
使用 Microsoft Entra 登录名创建用户
创建 Microsoft Entra 登录后,创建一个数据库级的 Microsoft Entra 用户,映射到虚拟
master数据库中的 Microsoft Entra 登录。 为演示如何将用户添加到特殊角色,请使用我们的示例bob@contoso.com,在虚拟master数据库中创建一个用户。 只有 Microsoft Entra 管理员或 SQL 服务器管理员才能在虚拟master数据库中创建用户。使用虚拟
master数据库,但如果你想在其他数据库创建用户,也可以重新连接到你选择的数据库。 运行以下查询。CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]Tip
尽管不需要使用 Microsoft Entra 用户别名(例如
bob@contoso.com),但建议将同一别名用于 Microsoft Entra 用户和Microsoft Entra 登录名。如果你需要直接从外部提供者创建具有特定对象 ID 的用户(例如,为了解决非唯一显示名称问题),请使用以下语法:
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 登录名授予服务器级角色
你可以将登录名添加到固定服务器级角色,例如 master 数据库中的 ##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 用户授予特殊角色
要赋予用户一个特殊的数据库角色,用户必须存在于虚拟 master 数据库中。
要将用户添加到角色中,请运行以下查询:
ALTER ROLE [dbmanager] ADD MEMBER [AzureAD_object]
若要从角色中删除用户,请运行以下查询:
ALTER ROLE [dbmanager] DROP MEMBER [AzureAD_object]
AzureAD_object 可以是 Microsoft Entra ID 中的 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
可选 - 禁用登录名
使用 ALTER LOGIN (Transact-SQL) DDL 语法,在专用 SQL 池中启用或禁用 Microsoft Entra 登录。
ALTER LOGIN [bob@contoso.com] DISABLE
要使 DISABLE 或 ENABLE 更改立即生效,请使用以下 T-SQL 命令清除身份验证缓存和 TokenAndPermUserStore 缓存:
DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS
通过运行以下查询检查登录是否被禁用:
SELECT name, type_desc, type
FROM sys.server_principals
WHERE is_disabled = 1