在 sqlcmd 中使用 Microsoft Entra ID 进行身份验证
本文内容
适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric SQL 数据库
sqlcmd 支持各种 Microsoft Entra 身份验证模型,具体取决于所安装的版本。
备注
虽然 Microsoft Entra ID 是 Azure Active Directory (Azure AD) 的新名称,但为了防止中断现有环境,Azure AD 仍保留在一些硬编码的元素中,例如 UI 字段、连接提供程序、错误代码和 cmdlet。 在本文中,这两个名称可以互换。
有关 sqlcmd 版本之间差异的详细信息,请参阅 sqlcmd 实用工具。
sqlcmd (Go) 支持更多 Microsoft Entra 身份验证模型,具体取决于 azidentity 包。 实现依赖于 go-sqlcmd 驱动程序中的 Microsoft Entra 连接器。
要使用 Microsoft Entra 身份验证,可以使用两个命令行开关之一。
-G
与 sqlcmd (ODBC) 中的使用情况(大部分)兼容。 如果提供了用户名和密码,则将使用 Microsoft Entra 密码验证进行身份验证。 如提供了用户名,则将使用 Microsoft Entra 交互式身份验证,该验证可能会显示 Web 浏览器。 如果没有提供用户名或密码,它将使用 DefaultAzureCredential
,这样会尝试通过各种机制进行身份验证。
--authentication-method=
可用于指定以下身份验证类型之一。
- 有关此模式使用的身份验证类型的概述,请参阅默认 Azure 凭据。
- 如果数据库自动化脚本旨在于本地开发环境和 Azure 中的生产部署中运行,请选择此方法。 在开发环境中,你可以使用客户端密码或 Azure CLI 登录名。 如果不从开发环境更改脚本,你可以在生产部署中使用托管标识或客户端密码。
- 设置环境变量
AZURE_TENANT_ID
和AZURE_CLIENT_ID
后,DefaultAzureCredential
才能开始检查环境配置并查找以下其他环境变量之一,以进行身份验证:- 设置环境变量
AZURE_CLIENT_SECRET
会将DefaultAzureCredential
配置为选择ClientSecretCredential
。 - 如果未设置
AZURE_CLIENT_SECRET
,设置环境变量AZURE_CLIENT_CERTIFICATE_PATH
会将DefaultAzureCredential
配置为选择ClientCertificateCredential
。
- 设置环境变量
- 如果未设置
AZURE_CLIENT_SECRET
和AZURE_CLIENT_CERTIFICATE_PATH
,设置环境变量 AZURE_USERNAME 会将DefaultAzureCredential
配置为选择UsernamePasswordCredential
。
此方法目前还没有实现,将回退到 ActiveDirectoryDefault
。
此方法使用用户名和密码进行身份验证。 如果需要 MFA,则此方法不起作用。
可以使用常用的命令行开关或
SQLCMD
环境变量来提供用户名和密码。如果没有使用用户的默认租户,请将
AZURE_TENANT_ID
环境变量设置为服务器的租户 ID。
此方法启动 Web 浏览器以对用户进行身份验证。
在具有系统分配的托管标识或用户分配的托管标识的 Azure VM 上运行 sqlcmd (Go) 时,请使用此方法。 如果使用的是用户分配的托管标识,请将用户名设置为托管标识的客户端 ID。 如果使用的是系统分配的标识,请将用户名留空。
此示例演示如何使用服务分配的托管标识 (SAMI) 进行连接:
-S testsrv.database.windows.net -d Target_DB_or_DW --authentication-method ActiveDirectoryManagedIdentity
此示例演示如何通过添加用户分配的托管标识 (UAMI) 的客户端 ID 来连接用户分配的托管标识:
-S testsrv.database.windows.net -d Target_DB_or_DW --authentication-method ActiveDirectoryManagedIdentity -U <user-assigned-managed-identity-client-id>
此方法将提供的用户名作为服务主体 ID 进行身份验证,并将密码作为服务主体的客户端密码。 以 <service principal id>@<tenant id>
格式提供用户名。 将 SQLCMDPASSWORD
变量设置为客户端密码。 如果使用证书而不是客户端密码,请将 AZURE_CLIENT_CERTIFICATE_PATH
环境变量设置为证书文件的路径。
一些 Microsoft Entra 身份验证设置没有命令行输入,并且一些环境变量是由 sqlcmd (Go) 所用的 azidentity
包直接使用的。
可以设置这些环境变量,以配置 Microsoft Entra 身份验证的某些方面,并绕过默认行为。 除了上面列出的变量之外,还有下面一些特定于 sqlcmd (Go) 的变量,适用于多种方法。
将此环境变量设置为 Microsoft Entra 中注册的应用程序标识符,该标识符被授权对 Azure SQL 数据库进行身份验证。 适用于 ActiveDirectoryInteractive
和 ActiveDirectoryPassword
方法。