我尝试将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服务器的日志中找到了相同的错误信息。
有人有解决此问题的想法吗?
提前致谢。
杰罗姆
[2013年2月2日更新] 我完成这篇文章的结果是我今天发现的测试结果。
使用数据包嗅探器时,我会检查通过ODBS数据源管理员(64位)和SMSS下的链接服务器测试连接时发送的数据包。
2系统之间的数据相同:
打开与PostgreSQL的连接
发送连接字符串(所有参数都相同)
PostgreSQL要求输入密码的响应(唯一不同的是盐值,但这是正常的)
密码以相同方式发送(使用MD5加密)
但之后,服务器的响应不同:
对于ODBC数据源,一切正常。我收到身份验证并可以发送测试查询。
对于SMSS,我收到一条错误消息(如上图所示)。
答案 0 :(得分:7)
好的,我找到了解决方案。
在pg_hba.conf文件中,我更改了将密码从MD5发送到trust的方法。重新加载服务器后,我的链接服务器连接正常工作。
条目现在是:
Type Database User Address Method
host all all x.x.x.x/x trust
希望能帮助别人。
答案 1 :(得分:1)
我想我找到了答案;最新版本的ODBC驱动程序和Postgres 10.x仍然出现错误。
在Windows ODBC诊断对话框中进行测试时,该连接将起作用,但在SQL Server中将失败。为远程用户设置密码时,请将密码放在大括号中。
{password}
如果您的用户密码中包含某些符号,这将防止ODBC连接字符串被弄乱。