我想从SQL Server中读取AWS Postgresql,所以
我在SQL Server机器上创建了一个到Postgresql的系统ODBC连接,测试它,很好。
然后我创建了一个链接服务器来连接到postgresql。在“安全”选项卡中(对于未在上面列表中定义的登录,连接将),我选择“使用登录的当前安全上下文进行”。
通过Windows身份验证连接到SQL Server时使用此链接服务器时,它可以正常工作。
如果我使用SQL Server身份验证帐户连接到SQL Server,尝试通过相同的链接服务器访问postgresql数据将失败身份验证。
我通过将我的安全设置切换为“使用此安全上下文进行”并提供POSTGRESQL登录/密码(与我在ODBC级别提供的相同)来修复此问题。
题:
如果不在Linked Server阶段重复postgresql详细信息,为什么它使用Window sauthentication帐户而不是SQL Server身份验证帐户?
这两个都与Postgresql无关?...
我让它工作但仍然困惑......
我将不得不猜测一下,但我希望给你足够的上下文来了解正在发生的事情,以便你可以进一步调试。
使用集成身份验证连接到SQL Server时,域控制器会提供与SQL通信的令牌,这用于验证从客户端到SQL Server进程的连接。在封面下,Windows可以使用NTLM或Kerberos来执行此握手。您可以在此博客文章中了解更多相关信息:NTLM vs. Kerberos Blog。尝试使用链接服务器时,此协议选择很重要,因为它必须通过网络对其他内容进行身份验证。
此时,使用凭据来运行SQL Server(通常作为服务窗口中的服务来查看)非常重要。如果您将SQL作为本地系统或网络服务运行或由Windows定义的其他内容(而不是网络上的特定用户),它可能有也可能没有权限与您的目标远程服务器通信(无论是postgres还是别的东西)。当您使用Kerberos并启用委派(域管理员需要执行)时,您可以将原始集成的身份验证凭据“流”通过链接服务器链接到下一个连接。 NTLM不会这样做。因此,通常的情况是在本地SQL Server中创建一个映射,以便在与远程链接服务器通话时使用哪些凭据。
如果您正在与ODBC驱动程序通信,那么您可能正在使用msdasql(OLEDB到ODBC桥)提供程序,然后还必须通过其身份验证堆栈。对于我的记忆来说,它是否甚至支持集成的身份验证已经太久了,更不用说Kerberos中的委派了。但是,如果您执行以下操作,则可以进一步调试此问题:
我不能专门与你的postgres提供商交谈,但这应该给你一些更多的调试工具。希望能帮助您更进一步。