我得到了一个错误:
FATAL: Peer authentication failed for user "postgres"
当我尝试让postgres与Rails一起工作时。
下面是我的pg_hba.conf
、database.yml
以及完整跟踪的转储。
我在pg_hba中将身份验证更改为md5,并尝试了不同的方法,但似乎都行不通。
我还尝试按照Rails3.2创建一个新用户和数据库,致命的是:用户的对等身份验证失败(pg::error)
但它们不会出现在pgadmin上,甚至在我运行sudo-u postgres psql-l
时也不会出现。
知道我哪里错了吗?
问题仍然是您的pg_hba.conf
文件(/etc/postgresql/9.1/main/pg_hba.conf*
)。
这一行:
local all postgres peer
应该是:
local all postgres md5
*如果找不到此文件,运行locate pg_hba.conf
应该会显示文件的位置。
修改此文件后,不要忘记重新启动PostgreSQL服务器。如果您在Linux上,那么这将是sudo service postgresql restart
。
以下是根据官方的PostgreSQL认证方法文档对这两个选项的简要描述。
对等身份验证方法的工作方式是从内核获取客户端的操作系统用户名,并将其用作允许的数据库用户名(具有可选的用户名映射)。此方法仅在本地连接上受支持。
基于口令的身份验证方法有md5和Password。除了跨连接发送密码的方式(分别为MD5散列和明文)之外,这些方法的操作类似。
如果你对密码“嗅探”攻击感到担忧,那么md5是首选。如果可能,应始终避免使用普通密码。但是,md5不能与db_user_namespace特性一起使用。如果连接受到SSL加密的保护,那么密码就可以安全地使用(虽然如果依赖于使用SSL,SSL证书身份验证可能是更好的选择)。
pg_hba.conf
的示例位置:/etc/postgresql/9.1/main/pg_hba.conf
安装Postgresql之后,我执行了以下步骤。
>
打开Ubuntu的pg_hba.conf
文件,它将位于/etc/postgresql/9.x/main
中,并更改此行:
local all postgres peer
至
local all postgres trust
重新启动服务器
$ sudo service postgresql restart
登录psql并设置密码
$ psql -U postgres
db> ALTER USER postgres with password 'your-pass';
最后将pg_hba.conf
从
local all postgres trust
至
local all postgres md5
重新启动postgresql服务器后,您可以使用自己的密码访问它
身份验证方法详细信息:
信任-任何可以连接到服务器的人都有权访问数据库
对等--使用客户端的操作系统用户名作为数据库用户名访问它。
md5-基于密码的身份验证
在此进行进一步的参考查询