适用于: SQL Server 2022 (16.x) 及更高版本。
本文介绍如何使用 Microsoft Entra ID 进行身份验证,而无需为本地 SQL Server 2022 及更高版本设置 Azure Arc。 Microsoft Entra 身份验证是一种基于云的标识管理服务,提供对 SQL Server 数据库的安全访问。 本教程指导你完成在没有 Azure Arc 的情况下为 Windows 上的 SQL Server 设置Microsoft Entra 身份验证的过程。
注释
Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。
本教程中,您将学习如何:
- 为 SQL Server 添加证书。
- 安装用于连接到 SQL Server 的 adal.dll。
- 创建并注册Microsoft Entra ID 应用程序。
- 授予应用程序权限。
- 将证书上传到应用程序。
- 添加注册表值,为 SQL Server 启用Microsoft Entra 身份验证。
先决条件
- 本地 SQL Server 2022 或更高版本。
- 活动 Microsoft Entra ID 租户。
- 此设置使用应用程序注册将 SQL Server 与 Microsoft Entra ID 相关联。 按照指南在 Microsoft Entra ID 中注册应用程序 。
- 验证 SQL Server 是否与 Azure 建立了网络连接,特别是以下 Microsoft Entra ID 服务和地址:
- login.windows.net。
- login.microsoftonline.com。
- graph.microsoft.com。
- graph.windows.net。
- database.windows.net。
- 不需要完整的 IP 地址和 URL 列表,但可以在文章《Microsoft 365 URL 和 IP 地址范围》中找到。
获得证书
- 获取用于 SQL Server 的证书,并将其导入计算机证书存储。 建议使用 CA 签名证书。
使用一个独特的 CN 名称,该名称不与证书存储中已安装的任何证书匹配。
在计算机证书存储中安装证书。 有关详细信息,请参阅 将证书导入本地计算机存储。
在证书上添加
ReadSQL Server 服务帐户的权限。
安装 adal.dll
安装 SQL Serveradal.dll 。 若要使用 Microsoft Entra 身份验证连接到 SQL Server,需要此库。 从最新的Microsoft OLE DB Driver for SQL Server安装中可以获取adal.dll。
安装 Microsoft OLE DB Driver for SQL Server 后,请确保 adal.dll 位于文件夹中
C:\windows\system32。您还应该有注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSADALSQL\TargetDir,其值为C:\windows\system32\adal.dll。 如果不存在,请创建它。
有关 Windows 注册表的详细信息,请参阅 高级用户的 Windows 注册表信息。
创建和注册Microsoft Entra ID 应用程序
- 在 Azure 门户中,选择“Microsoft Entra ID”>“应用注册”>“新建注册”。
- 指定名称 - 本文中的示例使用 SQLServer。
- 选择“支持的帐户类型”并使用“仅此组织目录中的帐户”
- 请不要设置重定向 URI
- 选择注册
请参阅以下应用程序注册:
授予应用程序权限
选择新创建的应用程序,然后在左侧菜单中,选择“API 权限”。
选择“添加权限”“Microsoft Graph”>“应用程序权限”>
- 勾选“Directory.Read.All”
- 选择“添加权限”
或者,
选择“添加权限”“Microsoft Graph”>“应用程序权限”>
勾选“Application.Read.All”
勾选“Group.Read.All”
勾选“User.Read.All”
选择“添加权限”
选择“授予管理员许可”
注释
若要向上述权限授予管理员同意,Microsoft Entra 帐户需要特权角色管理员角色或更高权限。
上传证书
将你在“ 获取证书 ”部分中创建的证书,以 .cer 或 .pem 格式上传到 Azure 门户中的应用程序注册。
添加注册表值,为 SQL Server 启用 Microsoft Entra 身份验证
使用以下值更新注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL<version-number>.<instance-name>\MSSQLServer\FederatedAuthentication ,为 SQL Server 启用Microsoft Entra 身份验证。 SQL Server 2022 的注册表项路径示例。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\FederatedAuthentication
警告
如果您使用注册表编辑器或其他方法不正确地修改注册表,可能会出现严重问题。 这些问题可能需要重新安装操作系统才能解决。 Microsoft 不能保证可解决这些问题。 您应自行承担修改注册表的风险。
-
FederatedAuthentication如果该键不存在,请使用以下所有值创建它。 - 列出的前五个条目需要使用在上一部分中创建的应用程序的值进行更新。 其余条目是默认值。
-
<sql-server-certificate-name>这是在“获取证书并上传到 Azure”部分中创建的证书的名称。 -
<application-client-id>是您在创建并注册 Microsoft Entra ID 应用程序部分中创建的应用程序(客户端)ID。 有关查找客户端 ID 的详细信息,请参阅 客户端 ID。 -
<tenant-id>是您 Azure 租户中的租户 ID。 可以在 Azure 门户中的“Microsoft Entra ID>”下找到租户 ID。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL<version-number>.<instance-name>\MSSQLServer\FederatedAuthentication]
"AADCertSubjectName"="<sql-server-certificate-name>"
"AADTenantSpecificSQLServicePrincipalCertSubjectName"="<sql-server-certificate-name>"
"ClientId"="<application-client-id>"
"AADTenantSpecificSQLServicePrincipalClientId"="<application-client-id>"
"PrimaryAADTenant"="<tenant-id>"
"AADChannelMaxBufferedMessageSize"="200000"
"AADGraphEndPoint"="graph.windows.net"
"AADGroupLookupMaxRetryAttempts"="10"
"AADGroupLookupMaxRetryDuration"="30000"
"AADGroupLookupRetryInitialBackoff"="100"
"AuthenticationEndpoint"="login.microsoftonline.com"
"CacheMaxSize"="300"
"FederationMetadataEndpoint"="login.windows.net"
"GraphAPIEndpoint"="graph.windows.net"
"IssuerURL"="https://sts.windows.net/"
"MsGraphEndPoint"="graph.microsoft.com"
"OnBehalfOfAuthority"="https://login.windows.net/"
"SendX5c"="false"
"ServicePrincipalName"="https://database.windows.net/"
"ServicePrincipalNameForArcadia"="https://sql.azuresynapse.net"
"ServicePrincipalNameForArcadiaDogfood"="https://sql.azuresynapse-dogfood.net"
"ServicePrincipalNameNoSlash"="https://database.windows.net"
"STSURL"="https://login.windows.net/"
"ClientCertBlackList"=""
有关 Windows 注册表的详细信息,包括备份、编辑和还原注册表项,请参阅 高级用户的 Windows 注册表信息。
测试身份验证
设置服务器并编辑注册表值后,Microsoft Entra 身份验证应正常工作。 使用以下 T-SQL 命令创建登录名来测试设置:
CREATE LOGIN [<admin@domain.com>] FROM EXTERNAL PROVIDER
常见问题
你可能会看到以下错误:
Keyset does not exist (AdalDll) with error code: 21
此错误可能是由于证书上的权限问题造成的。 确保 SQL Server 服务帐户对证书具有 Read 权限。 如果问题仍然存在,请确保证书具有与证书存储中任何其他证书不匹配的唯一 CN 名称。