PowerShell使用MFA认证连接Azure SQL Server报错求解
问题原因
- 你遇到的报错本质是当前安装的SqlServer模块版本过低,其依赖的底层System.Data.SqlClient驱动不支持
Active Directory Interactive(带MFA的交互认证)方式,导致找不到对应认证提供程序。
解决方案
方案1:升级SqlServer模块(适配手动运行场景,可弹出MFA验证窗)
- 首先以管理员权限启动PowerShell,执行以下命令查看当前已安装的SqlServer模块版本:
Get-Module SqlServer -ListAvailable
若版本低于21.1.18256,执行以下命令升级到最新版:Install-Module -Name SqlServer -Force -AllowClobber - 升级完成后使用如下代码连接数据库,运行时会自动弹出MFA验证窗口:
# 强制加载指定最低版本的SqlServer模块,避免调用到旧版本 Import-Module SqlServer -MinimumVersion 22.0.49 $serverName = "<Azure SQL服务器名>.database.windows.net" $databaseName = "<数据库名>" # 若你的账号属于多租户,可在连接字符串后补充TenantId=<你的租户ID>参数 $connStr = "Server=$serverName;Database=$databaseName;Authentication=Active Directory Interactive;" $database = Get-SqlDatabase -ConnectionString $connStr # 验证连接是否正常,列出列主密钥 Get-SqlColumnMasterKey -InputObject $database
方案2:结合Az模块获取AccessToken(适配自动化场景,无需交互弹窗)
如果你的脚本需要自动化运行,可通过Azure官方Az模块获取访问令牌直接认证,无需触发MFA交互:
# 首次运行需先安装Az.Sql模块:Install-Module Az.Sql -Force Import-Module Az.Sql # 登录Azure账号,可添加-Tenant参数指定租户ID Connect-AzAccount # 获取Azure SQL的访问令牌 $accessToken = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token $serverName = "<Azure SQL服务器名>.database.windows.net" $databaseName = "<数据库名>" $connStr = "Server=$serverName;Database=$databaseName;" $database = Get-SqlDatabase -ConnectionString $connStr -AccessToken $accessToken Get-SqlColumnMasterKey -InputObject $database
内容的提问来源于stack exchange,提问作者FinneVirta
相关产品推荐
相关产品推荐

