我有一个非常简单的DacPac,它是由Azure DevOps构建生成的,并由发布管道发布。构建工作正常,但管道因连接错误而失败。我已经检查并重新检查了设置。在目标服务器上正确设置了防火墙规则,凭据是有效的,但不会通过发布。我尝试了许多组合,包括指定端口,但无法连接它。如果尝试从PowerShell和Invoke-SqlCmd启动连接,则会收到类似的连接错误。
谁能阐明一些想法?
在Hosted 2017代理上是否有任何端口限制可能会成为障碍(例如1433被阻止)?
我需要更新代理吗?
SQL连接是否需要一些其他配置?
谢谢
我得到的错误是:
无法连接到目标服务器“ .database.windows.net”。 请验证连接信息,例如服务器名称, 登录凭据以及目标服务器的防火墙规则。登录 用户“数据”失败...
答案 0 :(得分:2)
似乎标准的SQL发布活动不支持AD Auth。 UI仅允许您为SQL用户提供凭据。有一个选项可以通过/TargetConnectionString
参数为SqlPackage.exe
提供连接字符串,但这不起作用,因为UI需要SQL凭据,并且这些凭据不能与/TargetConnectionString
结合使用参数。
我通过从标准PowerShell版本脚本运行SqlPackage.exe
来解决此问题。
&“ C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ Extensions \ Microsoft \ SQLDB \ DAC \ 140 \ SqlPackage.exe” /SourceFile:"$(System.DefaultWorkingDirectory)/_MyProj.Infrastructure build / DBScripts / bin / Debug / MyProj.Database.dacpac“ /操作:发布 / tcs:“服务器= myprodsql.database.windows.net;初始 Catalog = OptimizedDb;持久性安全信息= False;用户 ID ='$(adminUserEmail)'; Password ='$(adminUserPassword)'; MultipleActiveResultSets = False; Encrypt = True; TrustServerCertificate = False; Authentication = Active Directory Password“
答案 1 :(得分:0)
我以前也遇到过同样的问题,解决此问题的“最简单”方法是将DevOps拥有的每个IP地址都列入白名单-遗憾的是,尽管列表很大,具体取决于您的地理位置,并且每周都会更改
我确实写了一个PS1脚本来解析列表并确保有必要的规则。
https://www.microsoft.com/en-nz/download/details.aspx?id=41653
但是这样做有几个明显的问题(少一个)...
某些区域的IP地址列表非常庞大,以至于Azure数据库无法全部包含它们,超出了限制。
在打开IP地址时,(至少在理论上)将攻击向量暴露给数据库。如果有人知道您服务器的地址,他们可能会尝试尝试访问它。
因此,我确实尝试了对Azure设置的0.0.0.0/allow访问权限-但这似乎不适用于DevOps。
我的最终解决方案是在Azure中启动VM并在其上安装构建代理。不理想,但确实有效。
答案 2 :(得分:0)
允许我的Azure SQL数据库的所有IP范围都对我有用。 现在,我只需要找出并缩小构建代理在Azure DevOps构建管道中运行的IP。
在Azure DevOps构建任务中自动设置防火墙规则不起作用。
答案 3 :(得分:0)
我在同一个问题上苦苦挣扎。我确实通过以下两个步骤来解决它
以下参考资料对我有所帮助。希望这会有所帮助。
答案 4 :(得分:-1)
您需要指定端口:xxx.database.windows.net,1433
。