Ruby->;pg_hba.conf设置为“的PostgreSQL连接;“sameuser标识”;而不是",;“信托”;

Ruby->;pg_hba.conf设置为“的PostgreSQL连接;“sameuser标识”;而不是",;“信托”;,ruby,postgresql,database-connection,ident,Ruby,Postgresql,Database Connection,Ident,我已经尝试了我能想到的每一个谷歌搜索词,但我找到的每一个词都在说在pg_hba.conf中设置本地连接到trust(如果本地任何人都能像他们说的那样登录并访问数据库,这似乎是一个安全漏洞) 在pg_hba.conf中,本地连接设置为ident sameuser。脚本应以该用户的身份运行,但我遇到以下错误: A database error occurred: fe_sendauth: no password supplied Ruby代码非常通用: conn_str = "DBI:pg:db

我已经尝试了我能想到的每一个谷歌搜索词,但我找到的每一个词都在说在
pg_hba.conf
中设置本地连接到
trust
(如果本地任何人都能像他们说的那样登录并访问数据库,这似乎是一个安全漏洞)

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
文件来解决这个问题, 但我更希望能够让用户登录并只访问DB服务器


有没有人能让PostgreSQL的
ident sameuser
在本地脚本中正常工作?

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

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

这本手册解释得很好

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

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


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

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

这本手册解释得很好

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

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

我怀疑:

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

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

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

我怀疑:

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

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


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

您的PostgreSQL版本号会有所帮助。还有,我两天前写了一封信。可能会有所帮助。欧文:ident设置对这些Ruby脚本不起作用。这正是我想做的。.pgpass有效。我相信您的环境变量方法也可以工作,但是如果您知道在哪里查找,这两种方法都会以明文形式保留密码:-P Postgresql版本是8.4。您的Postgresql版本号将有所帮助。还有,我两天前写了一封信。可能会有所帮助。欧文:ident设置对这些Ruby脚本不起作用。这正是我想做的。.pgpass有效。我相信您的环境变量方法也可以工作,但是如果您知道在哪里查找,这两种方法都会将密码保留在明文中:-P Postgresql版本是8.4。谢谢,A.H.这样做了。将字符串更改为:conn_str=“DBI:pg:dbname=mydb”和ident connections现在可以正常工作:-)在连接字符串中添加“host=”参数显然会将其从通过套接字使用本地连接转换为TCP/IP…此行为与MSSQL不同,MSSQL将到本地主机的连接视为本地连接…谢谢,A.H.就是这样。将字符串更改为:conn_str=“DBI:pg:dbname=mydb”和ident connections现在可以正常工作:-)在连接字符串中添加“host=”参数显然会将其从通过套接字使用本地连接转换为TCP/IP…此行为与MSSQL不同,MSSQL将到本地主机的连接视为本地连接。。。
conn_str = "DBI:pg:dbname=mydb;host=" + localhost
@connection = DBI.connect(conn_str, "myuser", '')