PowerShell Core下dbaTools使用Azure AD账户连接MS SQL实例失败问题
问题原因及解决方案
核心疑问解答
PowerShell Core 完全支持使用 Windows 身份验证连接 MS SQL 实例,该报错是 .NET 运行时底层的 SQL 客户端库默认配置差异导致,并非功能不支持。
报错根因
- PowerShell 5.1 基于 .NET Framework 运行,内置的
System.Data.SqlClient库默认会自动传递当前登录的 Windows 域凭据(包括已关联 Azure AD 的混合域账户)进行集成认证。 - PowerShell Core 7.x 基于 .NET Core/.NET 运行,使用的是新一代
Microsoft.Data.SqlClient库,该库针对 Azure AD 关联的域账户,默认不会主动传递当前 Windows 身份凭据,因此请求会以匿名身份发送,触发 NT AUTHORITY\ANONYMOUS LOGON 登录失败报错。
可行解决方法
方法1:调用命令时指定认证类型
执行 Connect-DbaInstance 时额外添加 -Authentication ActiveDirectoryIntegrated 参数即可,命令示例:
Connect-DbaInstance -SqlInstance <servername>\<instancename> -Authentication ActiveDirectoryIntegrated
该参数会强制 SQL 客户端使用当前 Azure AD 关联的 Windows 账户凭据完成集成认证,和 SSMS、PowerShell 5.1 的默认行为一致。
方法2:配置 dbatools 默认认证规则
如果需要频繁执行连接操作,可直接设置 dbatools 全局默认认证类型,无需每次调用命令时加参数:
Set-DbatoolsConfig -FullName sql.connection.authentication -Value 'ActiveDirectoryIntegrated' -PassThru | Register-DbatoolsConfig
配置完成后重启 PowerShell Core 会话即可生效。
内容的提问来源于stack exchange,提问作者cejohn
相关产品推荐
相关产品推荐

