使用Windows身份验证或SQL身份验证链接到Postgresql时的奇怪设置

问题描述 投票:0回答:1

我想从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 postgresql linked-server
1个回答
1
投票

我将不得不猜测一下,但我希望给你足够的上下文来了解正在发生的事情,以便你可以进一步调试。

使用集成身份验证连接到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中的委派了。但是,如果您执行以下操作,则可以进一步调试此问题:

  • 考虑哪个帐户正在运行SQL
  • 考虑使用哪种机制对sql进行集成auth,以及是否可以使用委托
  • 确定使用哪些凭据进行ODBC目标的出站连接。您应该能够通过分析器机制调试大部分内容,因为存在分布式查询/链接服务器事件集IIRC。

我不能专门与你的postgres提供商交谈,但这应该给你一些更多的调试工具。希望能帮助您更进一步。

© www.soinside.com 2019 - 2024. All rights reserved.