Ruby – >将pg_hba.conf的PostgreSQL连接设置为“ident sameuser”而不是“trust”

我已经尝试了我能想到的所有Google搜索词,但是我挖掘的所有东西都在说设置本地连接以trust pg_hba.conf (如果任何人在本地可以登录并访问数据库,就像他们说的那样,这似乎是一个安全漏洞是)。

pg_hba.conf本地连接设置为ident sameuser 。 该脚本应该以该用户身份运行,但是我收到此错误:

 A database error occurred: fe_sendauth: no password supplied 

Ruby代码非常通用:

 conn_str = "DBI:pg:dbname=mydb;host=" + localhost @connection = DBI.connect(conn_str, "myuser", '') 

我可以通过创建这里描述的~/.pgpass文件来解决这个问题 ,但我更希望能够让用户登录并只访问数据库服务器。

有没有人能够使PostgreSQL的ident sameuser能够正常使用本地脚本?

我怀疑这个:

在pg_hba.conf中, 本地连接设置为ident sameuser。 该脚本应该以该用户身份运行,但是我收到此错误[…]

 conn_str = "DBI:pg:dbname=mydb;host=" + localhost @connection = DBI.connect(conn_str, "myuser", '') 

请注意,“本地”连接与“localhost”的连接不同。 只要在连接URL中提到“localhost”,就会创建TCP / IP套接字。 它们由`pg_hba.conf中的host规则管理。

要使用真正的“本地”连接,必须使用Unix域套接字。 但我不知道Ruby DBI连接器是否支持它们。

ident设置适用于本地系统用户和PostgreSQL 8.4。 您可能需要调整pg_hba.conf设置。

检查数据库日志文件以查看连接的确切位置以及系统用户名是否与数据库角色名称匹配。 您可能必须在postgresql.conf中激活log_connections

该手册确实很好地解释了身份validation方法 。

如果系统用户名和数据库角色名称不匹配,则必须使用.pgpass文件。 但是你的密码应该仍然是安全的。 只有系统用户postgres才能读取它。 我引用手册 :

在Unix系统上,.pgpass上的权限必须禁止对世界或组的任何访问; 通过命令chmod 0600~ / .pgpass实现此目的。