我有一个有点复杂的部署场景要处理。我有两个域,生产和测试,它们彼此不信任。我正在实现从生产域到测试域的自动化部署,并且测试域中的数据库仅使用 windows 授权。
我们使用 sqlcmd.exe 来部署实际的脚本。我们尝试使用 Invoke-SqlCmd,但它不适合在当前状态下使用,我们不再考虑它。
最初的想法只是使用 powershell 远程连接到测试域中的服务器,使用 Get-Credential 使用凭据进行身份验证。然后我们调用 sqlcmd.exe(使用远程会话的测试域凭据)来执行脚本。但是,我们很快就遇到了这类场景常见的“双跳”场景:不允许远程会话通过 sqlcmd 将凭据传递给 SQL Server。
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'..
下一个想法是配置我们的数据库服务器以支持 CredSSP,以便远程会话可以通过 sqlcmd 传递其凭据。但是,似乎 sqlcmd.exe 能够检测到 CredSSP 会话并在信任问题时终止。
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login failed. The login is from an untrusted domain and cannot be used with Windows authentication..
所以最后,我们使用的解决方案是使用 CredSSP 远程访问测试域中的服务器(明确不是数据库服务器),然后使用 sqlcmd 对数据库服务器执行脚本。只要 sqlcmd 不在它连接到的同一台机器上调用,它似乎就可以工作。
不知怎的,我不禁认为我做错了什么,这不应该这么复杂。但是,我似乎无法找到有关此类情况的太多信息。有任何想法吗?