2013-08-01 66 views
9

我尝试一个PostgreSQL到SQL Server连接2012服务器作为链接服务器的SQL Server 2012:链接的服务器添加到PostgreSQL

我发现在不同的论坛上提出了一些建议,并按照它。但我坚持认证问题。

我解释一下:

在SQL Server中,我有安装PostgreSQL的(psqlodbc_09_02_0100-64)的ODBC驱动程序。我创建了一个系统DSN到PostgreSQL上的特定数据库。此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) 

错误消息是法国人,TRADUCTION是:“通过密码验证失败的用户‘Postgres的’我找到日志PostgreSQL服务器在相同的错误消息。 。

是有人有一个想法,为解决这个问题呢?提前

感谢。

杰罗姆

[更新2013年2月8日] 我完成这篇文章与我今天实现的测试结果。当使用数据包嗅探器时,我检查通过ODBS数据源管理员(64位)和SMSS下的链接服务器测试连接时发送的数据包。

的数据是2系统之间是相同的为:

  • 打开到PostgreSQL

  • 的连接发送所述连接字符串(所有参数都相同)

  • 的PostgreSQL要求输入密码的响应(只有不同​​的是盐值,但这是正常的)

  • 密码被sended以相同的方式(用MD5加密后)

但之后,服务器的响应不同:

对于ODBC数据源,一切工作正常。我收到验证并可以发送测试查询。

对于SMSS,我收到一条错误消息(如上所述)。

回答

7

好的,我找到了解决方案。

在pg_hba.conf文件中,我更改了从MD5向密码发送密码的方法。重新加载服务器后,我的链接服务器连接起作用。

条目现在是:

Type Database User Address Method 

host all  all x.x.x.x/x trust 

在希望帮助别人人民。