通过PowerShell创建Azure SQL服务器登录名时连接失败
Azure Pipeline中Add-SqlLogin连接Azure SQL Server失败
我在Azure Pipeline的AzurePowerShell@5任务里执行两段PowerShell脚本:第一段创建Azure SQL数据库没问题,第二段创建SQL登录名时直接报错**"Failed to connect to server"**。
两段脚本如下:
创建Azure SQL数据库(执行成功)
$database = New-AzSqlDatabase -ResourceGroupName $resourceGroupName ` -ServerName $serverName ` -DatabaseName $dbName ` -RequestedServiceObjectiveName $databaseTier ` -BackupStorageRedundancy $backupPolicy
创建SQL登录名(执行失败)
Add-SqlLogin -ServerInstance $serverName -LoginName $loginName -LoginType 'SqlLogin' -LoginPSCredential $credential -Enable -GrantConnectSql -ConnectionTimeout 90
已知情况
- 用SSMS能正常连接目标SQL服务器和数据库,手动创建该登录名操作可行
- 本地运行第二段脚本时,同样报连接失败的错,未出现权限不足的提示
排查和解决建议
1. 修正ServerInstance参数格式
Azure SQL Server的实例名必须使用完整FQDN格式:{serverName}.database.windows.net,如果你的$serverName仅传入短名称,会导致无法正确解析服务器地址。修改脚本如下:
$fullServerInstance = "$serverName.database.windows.net" Add-SqlLogin -ServerInstance $fullServerInstance -LoginName $loginName -LoginType 'SqlLogin' -LoginPSCredential $credential -Enable -GrantConnectSql -ConnectionTimeout 90
2. 检查SQL Server防火墙规则
- 若使用微软托管代理,需在Azure门户的SQL服务器防火墙设置中勾选允许Azure服务和资源访问此服务器
- 若使用自托管代理,要将代理所在机器的公网IP添加到SQL服务器的防火墙白名单
3. 确认SqlServer模块版本兼容性
Add-SqlLogin属于SqlServer模块,旧版本可能不支持Azure SQL Server。可在脚本开头指定安装兼容版本:
Install-Module -Name SqlServer -RequiredVersion 22.1.1 -Force -AllowClobber Import-Module SqlServer -RequiredVersion 22.1.1
4. 换用Az.Sql模块创建登录名
如果上述方法无效,可直接使用Az.Sql模块的命令绕开直接连接的问题:
New-AzSqlServerLogin -ResourceGroupName $resourceGroupName -ServerName $serverName -LoginName $loginName -Password $credential.GetNetworkCredential().Password
内容的提问来源于stack exchange,提问作者PurpleKoala
相关产品推荐
相关产品推荐

