我尝试将 PostgreSQL 连接到 SQL Server 2012 服务器作为链接服务器
我在不同的论坛上找到了一些建议并遵循它。但我遇到了身份验证问题。
我解释:
在 SQL Server 上,我已经安装了 PostgreSQL 的 ODBC 驱动程序(psqlodbc_09_02_0100-x64)。我为 PostgreSQL 上的特定数据库创建了一个系统 DSN。此 DSN 工作正常。
使用 SSMS,我运行以下命令来添加链接服务器:
EXEC master.dbo.sp_addlinkedserver
@server = N'lnk_test',
@srvproduct=N'PostgreSQL Unicode(x64)',
@provider=N'MSDASQL',
@provstr=N'Driver=PostgreSQL Unicode(x64);uid=postgres;Server=test1;database=accueil;pwd=MyPassword;SSLmode=disable;PORT=5432'
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'lnk_test',
@useself=N'True',
@locallogin=NULL,
@rmtuser=NULL,
@rmtpassword=NULL
运行后,我有一个名为“lnk_test”的新链接服务器。当我收到以下错误消息时:
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "pgTest1_accueil".
OLE DB provider "MSDASQL" for linked server "pgTest1_accueil" returned message "[Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed".
OLE DB provider "MSDASQL" for linked server "pgTest1_accueil" returned message "FATAL: authentification par mot de passe échouée pour l'utilisateur « postgres »". (Microsoft SQL Server, Error: 7303)
错误消息是法语,翻译是:“用户“postgres”的密码验证失败。我在PostgreSQL服务器的日志中发现了相同的错误消息。
有人有解决这个问题的想法吗?
提前致谢。
杰罗姆
[更新 2/08/2013] 我用我今天意识到的测试结果完成了这篇文章。
当使用数据包嗅探器时,我检查通过 ODBS 数据源管理器(64 位)和 SSMS 下的链接服务器测试连接时发送的数据包。
两个系统之间的数据相同:
打开与 PostgreSQL 的连接
发送连接字符串(所有参数都相同)
PostgreSQL 要求输入密码的响应(唯一不同的是盐值,但这是正常的)
密码以相同的方式发送(使用 MD5 加密)
但之后,服务器的响应不同:
对于 ODBC 数据源,一切正常。我收到身份验证并可以发送测试查询。
对于 SSMS,我收到一条错误消息(如上所述)。