使用 Windows 身份验证或 SQL 身份验证链接到 Postgresql 时的奇怪设置
Weird setting when linking to Postgresql using Windows authentication or SQL authentication
我想从 SQL 服务器中读取 AWS Postgresql,所以
我在 SQL 服务器机器上创建了一个到 Postgresql 的系统 ODBC 连接,测试了它,没问题。
然后我创建了一个链接服务器来连接到 postgresql。
在“安全”选项卡中(对于上面列表中未定义的登录名,连接将会),我选择了 "Be made using the login's current security context".
在通过 windows 身份验证连接到 SQL 服务器的情况下使用此链接服务器时,它工作正常。
如果我使用 SQL 服务器身份验证帐户连接到 SQL 服务器,尝试通过同一链接服务器访问 postgresql 数据时身份验证失败。
我通过将我的安全设置切换到 "Be made using this security context" 并提供 POSTGRESQL login/password(与我在 ODBC 级别提供的相同)来解决这个问题。
问题:
不在链接服务器阶段重复 postgresql 的详细信息,为什么它使用 Window 身份验证帐户而不是 SQL 服务器身份验证帐户?
两者都与 Postgresql 无关吗?...
我成功了,但仍然很困惑...
我将不得不猜测一些来帮助你,但我希望能给你足够的上下文来理解正在发生的事情,以便你可以进一步调试。
当您使用集成身份验证连接到 SQL 服务器时,域控制器会发出一个令牌以与 SQL 通信,这用于验证您从客户端到 [=35= 的连接] 服务器的进程。在幕后,Windows 可以使用 NTLM 或 Kerberos 来执行此握手。您可以在此博客 post 中阅读更多相关信息:
NTLM vs. Kerberos Blog。当尝试使用 linked 服务器时,此协议选择很重要,因为它必须随后通过网络向其他东西进行身份验证。
此时,重要的是使用什么凭据给运行SQL服务器(通常作为服务在服务window中查看)。如果您 运行ning SQL 作为本地系统或网络服务或 windows 定义的其他内容(而不是作为网络上的特定用户),它可能有也可能没有权限与您的目标远程服务器交谈(无论是 postgres 还是其他)。当您使用 Kerberos 并启用委派(域管理员需要执行此操作)时,您可以通过 linked 服务器 link 将原始集成身份验证凭据 "flow" 用于下一个连接。 NTLM 不这样做。因此,通常的情况是在本地 SQL 服务器中创建一个映射,说明在与远程 linked 服务器通话时使用的凭据。
如果您正在与 ODBC 驱动程序通信,那么您可能正在使用 msdasql(OLEDB 到 ODBC 桥)提供程序,然后还必须通过其身份验证堆栈。对于它是否甚至完全支持集成身份验证,我的记忆已经太久了,更不用说 Kerberos 中的委托了。但是,如果您:
,您或许可以进一步调试此问题:
- 考虑哪个帐号是运行ning SQL
- 考虑使用哪种机制对 sql 进行集成身份验证,以及这是否适用于委托
- 确定使用哪些凭据与您的 ODBC 目标建立出站连接。您应该能够通过分析器机制调试大部分内容,因为有一个分布式 query/linked 服务器事件集 IIRC。
我无法具体与您的 postgres 提供商交谈,但这应该为您提供更多调试工具。希望能帮助您更进一步。
我想从 SQL 服务器中读取 AWS Postgresql,所以
我在 SQL 服务器机器上创建了一个到 Postgresql 的系统 ODBC 连接,测试了它,没问题。
然后我创建了一个链接服务器来连接到 postgresql。 在“安全”选项卡中(对于上面列表中未定义的登录名,连接将会),我选择了 "Be made using the login's current security context".
在通过 windows 身份验证连接到 SQL 服务器的情况下使用此链接服务器时,它工作正常。
如果我使用 SQL 服务器身份验证帐户连接到 SQL 服务器,尝试通过同一链接服务器访问 postgresql 数据时身份验证失败。
我通过将我的安全设置切换到 "Be made using this security context" 并提供 POSTGRESQL login/password(与我在 ODBC 级别提供的相同)来解决这个问题。
问题:
不在链接服务器阶段重复 postgresql 的详细信息,为什么它使用 Window 身份验证帐户而不是 SQL 服务器身份验证帐户?
两者都与 Postgresql 无关吗?...
我成功了,但仍然很困惑...
我将不得不猜测一些来帮助你,但我希望能给你足够的上下文来理解正在发生的事情,以便你可以进一步调试。
当您使用集成身份验证连接到 SQL 服务器时,域控制器会发出一个令牌以与 SQL 通信,这用于验证您从客户端到 [=35= 的连接] 服务器的进程。在幕后,Windows 可以使用 NTLM 或 Kerberos 来执行此握手。您可以在此博客 post 中阅读更多相关信息: NTLM vs. Kerberos Blog。当尝试使用 linked 服务器时,此协议选择很重要,因为它必须随后通过网络向其他东西进行身份验证。
此时,重要的是使用什么凭据给运行SQL服务器(通常作为服务在服务window中查看)。如果您 运行ning SQL 作为本地系统或网络服务或 windows 定义的其他内容(而不是作为网络上的特定用户),它可能有也可能没有权限与您的目标远程服务器交谈(无论是 postgres 还是其他)。当您使用 Kerberos 并启用委派(域管理员需要执行此操作)时,您可以通过 linked 服务器 link 将原始集成身份验证凭据 "flow" 用于下一个连接。 NTLM 不这样做。因此,通常的情况是在本地 SQL 服务器中创建一个映射,说明在与远程 linked 服务器通话时使用的凭据。
如果您正在与 ODBC 驱动程序通信,那么您可能正在使用 msdasql(OLEDB 到 ODBC 桥)提供程序,然后还必须通过其身份验证堆栈。对于它是否甚至完全支持集成身份验证,我的记忆已经太久了,更不用说 Kerberos 中的委托了。但是,如果您:
,您或许可以进一步调试此问题:- 考虑哪个帐号是运行ning SQL
- 考虑使用哪种机制对 sql 进行集成身份验证,以及这是否适用于委托
- 确定使用哪些凭据与您的 ODBC 目标建立出站连接。您应该能够通过分析器机制调试大部分内容,因为有一个分布式 query/linked 服务器事件集 IIRC。
我无法具体与您的 postgres 提供商交谈,但这应该为您提供更多调试工具。希望能帮助您更进一步。