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,我收到一条错误消息(如上面所述).
好的,我找到了解决方案.
在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)
希望能帮助别人.
| 归档时间: |
|
| 查看次数: |
16833 次 |
| 最近记录: |