使用PostgreSQL dblink进行身份验证问题

时间:2014-04-14 10:28:14

标签: postgresql authentication dblink

如何在Postgres中创建dblink连接而不提供用户名&密码(出于安全原因)?

运行以下查询将返回以下错误:

SELECT dblink_connect('conn_1','dbname=adatabase');

"could not establish connection 08001"

我的pgpass.conf文件有以下条目,我在pgAdmin中以postgres用户身份运行脚本:

localhost:5432:*:postgres:apassword

使用 dblink_connect_u 也会返回相同的错误。

我在Windows 2012 Server上运行Postgres 9.2

2 个答案:

答案 0 :(得分:1)

服务器使用自己的pgpass文件,而不是“你的”文件,它是不可访问的。

请考虑dblink_connect_u文档中的摘录:

  

此外,即使远程服务器确实需要密码,也可以   用于从服务器环境提供的密码,例如   〜/ .pgpass文件属于服务器的用户

在unix中它将是~postgres/.pgpass,在Windows中,您应该找到相应的位置,具体取决于运行服务器进程的操作系统用户(postgres或系统帐户,具体取决于您的安装程序)。< / p>

如果操作系统用户没有主目录,或者将pgpass.conf放在那里是不明智的,您可以通过PGPASSFILE环境变量设置不同的位置。我不知道Windows管理员如何为特定服务设置环境变量。

答案 1 :(得分:1)

如果您要连接到PostgreSQL数据库,则可以在要连接的服务器上修改your pg_hba.conf,以便(例如)允许来自本地计算机的用户进行无密码连接:

local   all   youruser                  trust
host    all   youruser   127.0.0.1/32   trust
host    all   youruser   ::1/128        trust

理想情况下,您可以在服务器上专门为dblink创建一个PostgreSQL用户,并且仅授予必要的权限(例如,仅在特定表上使用SELECT。)