教程:设置 SQL Server 的 Microsoft Entra 身份验证

适用于: SQL Server 2022 (16.x)

本文分步介绍了如何 设置 Microsoft Entra ID 身份验证,以及如何使用不同的 Microsoft Entra 身份验证方法。

注意

Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。

本教程介绍如何执行下列操作:

  • 创建和注册 Microsoft Entra 应用程序。
  • 向 Microsoft Entra 应用程序授予权限
  • 创建和分配证书
  • 通过 Azure 门户为 SQL Server 配置 Microsoft Entra 身份验证
  • 创建登录名和用户
  • 使用支持的身份验证方法连接

先决条件

身份验证先决条件

注意

扩展功能已在 Azure 中实现,允许在为 SQL Server 设置 Microsoft Entra 管理员期间自动创建 Azure 密钥保管库证书和 Microsoft Entra 应用程序。 有关更多信息,请参阅“教程:使用自动化功能为 SQL Server 设置 Microsoft Entra 管理员”。

  • SQL Server 的 Microsoft Entra 应用程序注册。 将 SQL Server 实例注册为 Microsoft Entra 应用程序可允许实例查询 Microsoft Entra ID,并允许 Microsoft Entra 应用程序代表 SQL Server 实例进行身份验证。 应用程序注册还需要一些权限,SQL Server 对某些查询使用这些权限。

  • SQL Server 使用此身份验证的证书,并将其存储在 Azure Key Vault (AKV) 中。 Azure Arc 代理将证书下载到 SQL Server 实例主机。

警告

Microsoft Entra ID 验证过身份的连接会始终加密。 如果 SQL Server 使用的是自签名证书,则必须在连接字符串中添加 trust server cert = true。 SQL Server 和使用 Windows 进行身份验证的连接不需要加密,但强烈建议使用加密。

创建和注册 Microsoft Entra 应用程序。

  1. Azure 门户中,选择“Microsoft Entra ID”>“应用注册”>“新建注册”。
    1. 指定名称 - 本文中使用的示例名称为 SQLServerCTP1
    2. 选择“支持的帐户类型”并使用“仅此组织目录中的帐户”
    3. 请不要设置重定向 URI
    4. 选择注册

请参阅以下应用程序注册:

Screenshot of registering application in the Azure portal.

授予应用程序权限

选择新创建的应用程序,然后在左侧菜单中,选择“API 权限”

  1. 选择“添加权限”>“Microsoft Graph”>“应用程序权限”

    1. 勾选“Directory.Read.All”
    2. 选择“添加权限”
  2. 选择“添加权限”>“Microsoft Graph”>“委托的权限”

    1. 勾选“Application.Read.All”
    2. 勾选“Directory.AccessAsUser.All”
    3. 勾选“Group.Read.All”
    4. 勾选“User.Read.All”
    5. 选择“添加权限”
  3. 选择“授予管理员许可”

Screenshot of application permissions in the Azure portal.

注意

若要授予对上述权限的管理员同意,Microsoft Entra 帐户需要具备“全局管理员”或“特权角色管理员”角色。

创建和分配证书

  1. 转到 Azure 门户,选择“密钥保管库”,然后选择要使用的密钥保管库或创建新密钥保管库。 选择“证书”>“生成/导入”

    1. 对于“证书创建方法”,请使用“生成”

    2. 添加证书名称和使用者。

    3. 建议的有效期为最多 12 个月。 其余值可以保留为默认值。

    4. 选择“创建”。

    Screenshot of creating certificate in the Azure portal.

    注意

    创建证书后,可能会显示证书已禁用。 刷新站点,证书将显示为已启用。

  2. 导航到新证书,然后选择证书最新版本的行。 选择“以 CER 格式下载”以保存证书的公钥

    Screenshot of certificate in the Azure portal where you can view and download the certificate.

    注意

    无需在 SQL Server 主机上完成此操作。 但在下一步中访问 Azure 门户的客户端上需要完成此操作。

  3. 在 Azure 门户中,导航到上面创建的应用注册,然后选择“证书”列表

    1. 选择“上传证书”
    2. 选择在上一步中下载的公钥(.cer 文件)。
    3. 选择 添加

    Screenshot of certificate and secrets menu in the Azure portal.

  4. 在 Azure 门户中,导航到存储证书的 Azure Key Vault 实例,然后从导航菜单中选择“访问策略

    1. 选择创建

    2. 对于“机密权限”,请选择“获取”和“列出”。

    3. 对于“证书权限”,请选择“获取”和“列出”

    4. 选择下一步

    5. 在“主体”页上,搜索你计算机的名称 - Azure Arc 实例,是 SQL Server 主机的主机名。

      Screenshot of Azure Arc server resource in portal.

    6. 通过选择两次“下一步”或选择“审查 + 创建”,跳过“应用程序(可选)”。

      验证“主体”的“对象 ID”匹配分配给实例的托管标识的“主体 ID”。

      Screenshot of Azure portal to review and create access policy.

      若要确认,请转到资源页并在“概览”页的“Essentials”框的右上角选择“JSON 视图”。 在标识下会找到“principalId

      Screenshot of portal control of JSON view of machine definition.

    7. 选择创建

    必须选择“创建”以确保应用权限。 若要确保已存储权限,请刷新浏览器窗口并检查 Azure Arc 实例的行是否仍然存在。

    Screenshot of adding access policy to the key vault in the Azure portal.

通过 Azure 门户为 SQL Server 配置 Microsoft Entra 身份验证

注意

可以使用 Azure CLIPowerShellARM 模板为 SQL Server 设置 Microsoft Entra 管理员。

  1. 转到 Azure 门户,然后选择“SQL Server – Azure Arc”,然后选择 SQL Server 主机的实例。

  2. 检查“SQL Server - Azure Arc”资源的状态,并查看它是否已通过转到“属性”菜单进行连接。 有关详细信息,请参阅验证 SQL Server - Azure Arc 资源

  3. 从“资源”菜单的“设置”下选择“Microsoft Entra ID 和 Purview”。

  4. 选择“设置管理员”,打开“Microsoft Entra ID”窗格,然后选择将作为 SQL Server 管理员登录名的帐户。

  5. 选择“客户管理的证书”和“选择证书”

  6. 选择“更改证书”,然后选择之前在新窗格中创建的 AKV 实例和证书

  7. 选择“客户管理的应用注册”

  8. 选择“更改应用注册”,然后选择之前创建的应用注册。

  9. 选择“保存”。 这会向 Arc 服务器代理发送请求,该代理将为该 SQL Server 实例配置 Microsoft Entra 身份验证。

    Screenshot of setting Microsoft Entra authentication in the Azure portal.

    下载证书和配置设置需要几分钟时间。 在 Azure 门户中设置所有参数并选择“保存”后,,将显示以下消息:SQL Server's Azure Arc agent is currently processing a request. Values below may be incorrect. Please wait until the agent is done before continuing。 在尝试登录 Microsoft Entra 之前,请等待确认保存过程为 Saved successfully

    Azure Arc 服务器代理只能在上一操作完成后更新。 这意味着,在最后一个配置完成之前保存新的 Microsoft Entra 配置可能会导致失败。 如果在选择“保存”时看到“扩展调用失败”消息,请等待 5 分钟,然后重试。

    注意

    授予 Microsoft Entra 管理员登录名 sysadmin 角色后,更改 Azure 门户中的 Microsoft Entra 管理员不会删除以前保留为 sysadmin 的登录名。 若要删除登录名,则必须手动删除该登录名。

    使用 SQL Server 的 Azure Arc 代理完成 SQL Server 实例的 Microsoft Entra 管理员更改后,无需重新启动服务器,更改即可生效。 要在 sys.server_principals 中显示新管理员,必须重新启动 SQL Server 实例,在此之前,显示的都是旧管理员。 可以在 Azure 门户中检查当前的 Microsoft Entra 管理员。

创建登录名和用户

SQL Server 主机上的 Azure Arc 代理完成其操作后,在门户中的“Microsoft Entra ID”菜单中选择的管理员帐户将是 SQL Server 实例上的 sysadmin。 使用 SSMSAzure Data Studio 等客户端,通过在服务器上拥有 sysadmin 权限的 Microsoft Entra 管理员帐户登录到 SQL Server。

注意

所有通过 Microsoft Entra 身份验证实现的 SQL Server 连接都需要加密连接。 如果数据库管理员 (DBA) 尚未为服务器设置受信任的 SSL/TLS 证书,登录可能会失败,显示消息“证书链是由不受信任的颁发机构颁发的”。若要解决此问题,请将 SQL Server 实例配置为使用客户端信任的 SSL/TLS 证书,或在高级连接属性中选择“信任服务器证书”。 有关详细信息,请参阅启用数据库引擎的加密连接

创建登录名语法

用于在 Azure SQL 数据库和 Azure SQL 托管实例上创建 Microsoft Entra 登录名和用户的语法现在可用于 SQL Server。

注意

在 SQL Server 上,拥有 ALTER ANY LOGINALTER ANY USER 权限的任何帐户都可以分别创建 Microsoft Entra 登录名或用户。 该帐户不需要是 Microsoft Entra 登录名。

若要为 Microsoft Entra 帐户创建登录名,请在 master 数据库中执行以下 T-SQL 命令:

CREATE LOGIN [principal_name] FROM EXTERNAL PROVIDER;

对于用户,主体名称的格式必须为 user@tenant.com。 在 Microsoft Entra ID 中,此为用户主体名称。 对于所有其他帐户类型(如 Microsoft Entra 组或应用程序),主体名称是 Microsoft Entra 对象的名称。

下面是一些示例:

-- login creation for Microsoft Entra user
CREATE LOGIN [user@contoso.com] FROM EXTERNAL PROVIDER;
GO
-- login creation for Microsoft Entra group
CREATE LOGIN [my_group_name] FROM EXTERNAL PROVIDER;
GO
-- login creation for Microsoft Entra application
CREATE LOGIN [my_app_name] FROM EXTERNAL PROVIDER;
GO

若要列出 master 数据库中的 Microsoft Entra 登录名,请执行 T-SQL 命令:

SELECT * FROM sys.server_principals
WHERE type IN ('E', 'X');

若要将 Microsoft Entra 用户成员身份授予给 sysadmin 角色(如 admin@contoso.com),请在 master 中执行以下命令:

CREATE LOGIN [admin@contoso.com] FROM EXTERNAL PROVIDER; 
GO
ALTER SERVER ROLE sysadmin ADD MEMBER [admin@contoso.com];
GO

sp_addsrvrolemember 存储过程必须作为 SQL Server sysadmin 服务器角色的成员执行。

创建用户语法

可以从 Microsoft Entra ID 创建数据库用户,作为与服务器主体(登录名)关联的数据库用户,也可以作为包含的数据库的用户。

若要在 SQL Server 数据库中从 Microsoft Entra 登录名创建 Microsoft Entra 用户,可以使用以下语法。

CREATE USER [principal_name] FROM LOGIN [principal_name];

principal_name 语法与登录名相同。

以下是一些示例:

-- for Azure AD user
CREATE USER [user@contoso.com] FROM LOGIN [user@contoso.com];
GO
-- for Azure AD group
CREATE USER [my_group_name] FROM LOGIN [my_group_name];
GO
-- for Azure AD application
CREATE USER [my_app_name] FROM LOGIN [my_app_name];
GO

若要创建 Microsoft Entra 包含的数据库的用户(该用户未绑定服务器登录名),可以执行以下语法:

CREATE USER [principal name] FROM EXTERNAL PROVIDER;

从组或应用程序创建 Microsoft Entra 数据库用户时,使用 Microsoft Entra 组名称或 Microsoft Entra 应用程序名称作为 <principal name>

以下是一些示例:

-- for Azure AD contained user
CREATE USER [user@contoso.com] FROM EXTERNAL PROVIDER;
GO
-- for Azure AD contained group
CREATE USER [my_group_name] FROM EXTERNAL PROVIDER;
GO
--for Azure AD contained application
CREATE USER [my_group_name] FROM EXTERNAL PROVIDER;
GO

若要列出数据库中创建的用户,请执行以下 T-SQL 命令:

SELECT * FROM sys.database_principals;

默认授予新数据库用户“Connect”权限。 其他 SQL Server 权限必须由授权者明确授予。

Microsoft Entra 来宾帐户

CREATE LOGINCREATE USER 语法还支持来宾用户。 例如,如果 testuser@outlook.com 受邀加入 contoso.com 租户,则可以使用与创建任何其他 Microsoft Entra 用户或登录名相同的语法将其作为登录名添加到 SQL Server。 创建来宾用户和登录名时,请使用来宾帐户的原始电子邮件,而不是其在租户中的用户主体名称。 在此示例中,即使在 contoso.com 租户中注册了帐户,也会提供 outlook.com

创建具有存在的登录名的来宾用户

CREATE USER [testuser@outlook.com] FROM LOGIN [testuser@outlook.com];

将来宾用户创建为包含的用户

CREATE USER [testuser@outlook.com] FROM EXTERNAL PROVIDER;

使用支持的身份验证方法连接

SQL Server 支持多种 Microsoft Entra 身份验证方法:

  • 默认
  • 用户名和密码
  • 集成
  • 全局使用多重身份验证
  • 服务主体
  • 托管标识
  • 访问令牌

使用以下方法之一连接到 SQL Server 实例。 有关更多信息,请参阅“SQL Server 的 Microsoft Entra 身份验证”。

使用 SSMS 的身份验证示例

注意

虽然 Microsoft Entra ID 是 Azure Active Directory (Azure AD) 的新名称,但为了防止中断现有环境,Azure AD 仍保留在一些硬编码的元素中,例如 UI 字段、连接提供程序、错误代码和 cmdlet。 在本文中,这两个名称可以互换。

下面是使用身份验证方法(Azure Active Directory - Universal with MFA)的 SQL Server Management Studio (SSMS) 连接页的快照

Screenshot SSMS showing the Connect to Server window.

在身份验证过程中,必须在 SSMS 中显式指示创建用户的数据库。 展开“选项”>“连接属性”>“连接到数据库:database_name

有关详细信息,请参阅使用 Microsoft Entra 多重身份验证

支持 Azure SQL 的 Microsoft Entra 身份验证的 SQL Server 工具也受到 SQL Server 2022 (16.x) 支持。

存储 Microsoft Entra ID 参数的位置

警告

Microsoft Entra ID 参数由 Azure Arc 代理配置,不应手动重新配置。

在 Linux 上,Microsoft Entra ID 参数存储在 mssql-conf 中。 有关 Linux 中的配置选项的详细信息,请参阅“使用 mssql-con 工具配置 Linux 上的 SQL Server”。

已知问题

  • 更新证书不会传播:
    • 为 SQL Server 配置 Microsoft Entra 身份验证后,在“SQL Server - Azure Arc”资源的“Microsoft Entra 和 Purview”窗格中更新证书可能不会完整传播。 这会导致保存成功,但仍显示旧值。 若要更新证书,请执行以下操作:

      • 选择“删除管理员”
      • 选择“保存”。
      • 选择“设置管理员”并使用新证书重新配置 Microsoft Entra 身份验证。
      • 选择“保存”。

另请参阅