0

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文件来解决此问题,但我更希望能够让用户登录并仅访问数据库服务器。

任何人都能够让 PostgreSQLident sameuser为本地脚本正常工作吗?

4

2 回答 2

2

我怀疑这一点:

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

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

请注意,“本地”连接与“localhost”连接不同。只要您在连接 URL 中提到“localhost”,就会创建一个 TCP/IP 套接字。这些由hostpg_hba.conf 中的规则管理。

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

于 2012-01-23T18:38:47.033 回答
1

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

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

该手册确实很好地解释了身份验证方法

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

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

于 2012-01-23T18:26:08.383 回答