我收到错误消息:
FATAL: Peer authentication failed for user "postgres"
当我尝试使 Postgres 与 Rails 一起使用时。
这是我的pg_hba.conf
,我的database.yml
和完整跟踪的转储。
我在 pg_hba 中将身份验证更改为 md5,并尝试了其他方法,但似乎没有任何效果。
我还尝试根据 Rails 3.2 创建新用户和数据库,致命:用户的对等身份验证失败(PG :: Error)
sudo -u postgres psql -l
时都不会显示在 pgadmin 上。
知道我要去哪里了吗?
问题仍然是您的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 服务器后,您可以使用自己的密码访问它
身份验证方法详细信息:
信任 - 可以连接到服务器的任何人都有权访问数据库
peer - 使用客户端的操作系统用户名作为数据库用户名来访问它。
md5 - 基于密码的身份验证
以获得更多参考,请点击这里
如果通过 localhost(127.0.0.1)连接,则不应遇到该特定问题。我不会对 pg_hba.conf 感到厌烦,但是我会调整您的连接字符串:
psql -U someuser -h 127.0.0.1 database
其中 someuser 是您要连接的用户,而 database 是该用户有权连接的数据库。
这是我在 Debian 上设置 postgres 的操作:
http://www.postgresql.org/download/linux/debian/ (Wheezy 7.x)
as root …
root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list
root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
root@www0:~# apt-get update
root@www0:~# apt-get install postgresql-9.4
root@www0:~# su - postgres
postgres@www0:~$ createuser --interactive -P someuser
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
postgres@www0:~$ createdb -O someuser database
postgres@www0:~$ psql -U someuser -h 127.0.0.1 database
享受!