SQL Server 2012:向PostgreSQL添加链接服务器

Jér*_*êne 9 sql sql-server postgresql linked-server sql-server-2012

我尝试将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
Run Code Online (Sandbox Code Playgroud)

运行后,我有一个名为"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)
Run Code Online (Sandbox Code Playgroud)

错误消息是法语,转录是:"密码验证失败,用户"postgres".我在PostgreSQL服务器的日志中找到相同的错误消息.

有人有解决这个问题的想法吗?

提前致谢.

杰罗姆

[2013年2月2日更新] 我用我今天意识到的测试结果完成了这篇文章.

当使用数据包嗅探器时,我检查通过ODBS数据源管理器(64位)和SMSS下的链接服务器测试连接时发送的数据包.

2系统之间的数据相同:

  • 打开与PostgreSQL的连接

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

  • PostgreSQL要求密码的响应(唯一不同的是盐值,但这是正常的)

  • 密码以相同的方式发送(使用MD5加密)

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

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

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

Jér*_*êne 7

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

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

现在是这样的:

Type Database User Address   Method

host all      all  x.x.x.x/x trust
Run Code Online (Sandbox Code Playgroud)

希望能帮助别人.