你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
你可以在 Azure Synapse Analytics 专用 SQL 池的虚拟数据库中创建并使用 Microsoft Entra ID(前身为 Azure Active Directory)中的服务器主体作为登录master。
Note
Microsoft Entra server principals 目前在 Azure Synapse Analytics 中处于预览阶段。
使用带有专用 SQL 池的 Microsoft Entra 服务器主体有几个好处:
- 支持将服务器角色用于权限管理。
- 支持多个 Microsoft Entra 用户使用 Azure Synapse Analytics 的特殊角色,例如
loginmanager和dbmanager角色。 - SQL 登录名与 Microsoft Entra 登录名之间的功能同等性。
- 增加功能改进支持,如通过使用仅限 Microsoft Entra 身份验证。 “仅限 Microsoft Entra 身份验证”允许你禁用 SQL 身份验证,这包括 SQL 服务器管理员、SQL 登录名和用户的身份验证。
- 使用具有特殊角色的 Microsoft Entra 服务主体登录名来全自动创建用户和数据库,以及执行 Microsoft Entra 应用程序的维护。
欲了解更多信息,请参见 Azure Synapse Analytics 的 Microsoft Entra 身份验证。
Permissions
要在虚拟master数据库中使用或创建 Microsoft Entra 登录,您需要以下权限:
- Microsoft Entra 管理员权限,或充当
loginmanager服务器角色的成员身份。 只有 Microsoft Entra 管理员才能创建第一个 Microsoft Entra 登录。 - 必须是与 Azure Synapse Analytics 使用的同一目录中的 Microsoft Entra ID 成员。
默认情况下,在 master 数据库中新创建的 Microsoft Entra 登录名会被授予 VIEW ANY DATABASE 权限。
Microsoft Entra 主体语法
使用以下语法来创建和管理 Microsoft Entra 服务器和数据库主体。
创建登录名
此语法基于 Microsoft Entra 标识来创建服务器级登录名。 只有 Microsoft Entra 管理员可以在虚拟master数据库中执行此命令。
CREATE LOGIN login_name
{
FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid']
| WITH <option_list> [,..]
}
<option_list> ::=
PASSWORD = { 'password' }
[ , SID = sid ]
login_name 指定 Microsoft Entra 主体,该主体是 Microsoft Entra 用户、组或应用程序。
有关详细信息,请参阅 CREATE LOGIN (Transact-SQL)。
根据登录信息创建用户
以下 T-SQL 语法创建与虚拟 master 数据库中的 Microsoft Entra 登录名对应的数据库级 Microsoft Entra 主体。 与创建数据库包含 Microsoft Entra 用户的语法类似,唯一的区别在于指定 FROM LOGIN [login_name],而非 FROM EXTERNAL PROVIDER。
要从 Microsoft Entra 登录名创建 Microsoft Entra 用户,可以使用以下语法。
CREATE USER [user_name] FROM LOGIN [login_name]
可以使用 sys.database_principals 中的 SID 列来区分从登录名创建的 Microsoft Entra 包含的数据库用户和 Microsoft Entra 用户。 对于包含的数据库用户,SID 是长度为 16 的二进制字符串。 对于基于登录名的用户,SID 长度为 18,后缀为 AADE。
Note
在 SID 后附加 AADE 后缀,即可据此识别某个 Microsoft Entra 用户是从登录名创建的。 然而,这也意味着该登录及其用户的 SID 在sys.database_principals和sys.server_principals之间不匹配。 要将用户与其登录关联起来,首先必须去除 AADE 后缀。
若要了解基于登录名的用户与包含的数据库用户之间的概念差异,请参阅包含的数据库用户。
有关创建用户语法的更多信息,请参阅 CREATE USER (Transact-SQL)。
通过使用 ALTER LOGIN 禁用或启用登录
使用 ALTER LOGIN (Transact-SQL) DDL 语法,在Azure Synapse Analytics专用 SQL 池中启用或禁用Microsoft Entra登录。
ALTER LOGIN [login_name] DISABLE
当你禁用登录时,服务器级主体就无法再连接了。 禁用登录还会阻止你从该登录创建的所有数据库主体(用户)连接到各自的数据库。
Note
ALTER LOGIN login_name DISABLE无法影响包含的数据库用户,因为它们不与登录名关联。Microsoft Entra 组不支持
ALTER LOGIN login_name DISABLE。已禁用的单个登录名不能是以下用户:即属于在
master数据库中创建的登录名组的用户(例如 Microsoft Entra 管理员组)。要立即生效
DISABLEORENABLE变更,请使用以下 T-SQL 命令清除认证缓存和TokenAndPermUserStore缓存:DBCC FLUSHAUTHCACHE DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS
限制和备注
- SQL Server 管理员无法在任何数据库中创建 Microsoft Entra 登录名或用户。
- Azure Synapse Analytics 工作区中的专用 SQL 池不使用逻辑 SQL 服务器。
- SQL 管理员或 SQL 用户不能执行下列 Microsoft Entra 操作:
CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDERCREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDEREXECUTE AS USER [bob@contoso.com]ALTER AUTHORIZATION ON securable::name TO [bob@contoso.com]
- Azure Synapse Analytics 不支持 Microsoft Entra 服务器主体(登录)的模拟:
- EXECUTE AS 子句 (Transact-SQL)
- EXECUTE AS (Transact-SQL)
- 支持在用户数据库中模拟 Microsoft Entra 数据库主体(用户)。
- Microsoft Entra 登录名不能与 Microsoft Entra 管理员重叠。 Microsoft Entra 管理员的优先级高于任何登录方式。 如果某个 Microsoft Entra 帐户已经有权以 Microsoft Entra 管理员身份单独访问服务器,或作为组成员访问服务器,则为此帐户创建的登录名不起任何作用。 但是,通过 T-SQL 创建登录名不会被阻止。 账户向服务器认证后,登录权限为 Microsoft Entra 管理员,而非新创建登录的权限。
- 不支持更改特定 Microsoft Entra 登录对象的权限:
GRANT <PERMISSION> ON LOGIN :: <Microsoft Entra account> TO <Any other login>
- 当你更改 Microsoft Entra 登录权限时,默认情况下,这些更改只有在登录下一次连接到专用 SQL 池时才会生效。 与登录名建立的任何现有开放连接都不会受到影响。 若要强制权限更改立即生效,可以手动清除身份验证和 TokenAndPermUserStore,如前面在使用 ALTER LOGIN 禁用或启用登录名时所述。 使用 ALTER SERVER ROLE 更改服务器角色成员身份时,此行为也适用。
- 在 SQL Server Management Studio 中,用于创建用户的脚本命令不会检查
master中是否已经存在具有相同名称的 Microsoft Entra 登录名。 它始终会为包含的数据库 Microsoft Entra 用户生成 T-SQL。 - 如果你尝试从具有非唯一显示名称的服务主体创建登录名或用户,则可能会出现错误。 有关如何缓解此错误的更多信息,请参见 命名注意事项。
- 通过使用 Microsoft Entra 登录创建的数据库用户在获得角色和权限时可能会遇到延迟。 如果你遇到这个问题,请使用以下命令:
- 从用户数据库中删除用户 。
- 执行
DBCC FREESYSTEMCACHE('TokenAndPermUserStore')以清除数据库上的安全缓存。 - 执行
DBCC FLUSHAUTHCACHE以清除联合身份验证上下文缓存。 - 基于登录名创建用户。
Microsoft Entra 组服务器主体限制
以下限制适用于Azure Synapse Analytics中的Microsoft Entra组登录:
- Microsoft Entra 组不支持服务器角色。
- 如果你的SQL管理员是Microsoft Entra组,该组的用户连接时会遇到一些限制。 每个 Microsoft Entra 用户并不会单独列出在
sys.server_principals表格中。 这一限制带来了多种后果,包括对SUSER_SID的调用会返回NULL。 - 属于 Microsoft Entra 组登录的 Microsoft Entra 用户登录不会被隐式创建。 这些用户没有默认架构,在你为 Microsoft Entra 用户创建登录名或为该组分配默认架构之前,无法执行诸如
CREATE SCHEMA之类的操作。 - 你不能将数据库的所有权更改为以 Microsoft Entra 组作为数据库所有者。
ALTER AUTHORIZATION ON database::<mydb> TO [my_aad_group]失败并出现错误消息:Msg 33181, Level 16, State 1, Line 4 The new owner cannot be Azure Active Directory group.