我已经在我的Ubuntu karma box上安装了PostgreSQL和pgAdminIII。

我能够成功地使用pgAdminIII(即连接/登录),但是当我尝试在命令行(使用psql)上使用相同的用户名/pwd登录到服务器时,我得到错误:

psql: FATAL:  Ident authentication failed for user "postgres"

现在有人知道如何解决这个问题吗?


当前回答

可以设置环境变量PGHOST=localhost:

$ psql -U db_user db_name
psql: FATAL:  Peer authentication failed for user "db_user"

$ export PGHOST=localhost
$ psql -U db_user db_name

Password for user mfonline:

其他回答

问题仍然是pg_hba.conf文件。这一行:你可以在/etc/postgres/ vary /main目录下找到这个文件

local   all             postgres                                peer
Should be

local   all             postgres                                md5

下面是官方PostgreSQL文档中关于身份验证方法的两个选项的简要描述。

对等的身份验证

对等身份验证方法的工作原理是从内核获取客户机的操作系统用户名,并将其用作允许的数据库用户名(可选的用户名映射)。此方法仅在本地连接上受支持。

密码身份验证

基于密码的认证方式有md5和password。除了通过连接发送密码的方式(分别为md5散列和明文)外,这些方法的操作类似。

如果您完全担心密码“嗅探”攻击,那么首选md5。尽量避免使用简单的密码。但是,md5不能与db_user_namespace特性一起使用。如果连接受SSL加密保护,则可以安全地使用密码(如果依赖于使用SSL,则SSL证书身份验证可能是更好的选择)。

修改此文件后,不要忘记重新启动PostgreSQL服务器。如果你在Linux上,那将是sudo service postgresql重启。

解决这个问题的一个方法是编辑pg_hba.conf

sudo vi /etc/postgresql/9.3/main/pg_hba.conf

暂时

# Database administrative login by Unix domain socket
local   all             postgres                                   trust

至此,您就完成了。为了安全,那就去吧

sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

然后返回,将pg_hba.conf设置为

# Database administrative login by Unix domain socket
local   all             postgres                                   md5

如果你在CentOS上使用它,你可能需要在做出上述解决方案后重新加载postgres:

systemctl restart postgresql-9.3.service

在以上所有的答案中,没有一个对我有用。我不得不手动更改数据库中的用户密码,它突然工作了。

psql -U postgres -d postgres -c "alter user produser with password 'produser';"

我使用了以下设置:

pg_hba.conf

local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            password  
# IPv6 local connections:
host    all             all             ::1/128                 password

以下命令连接成功:

psql -U produser -d dbname -h localhost -W 

如果你做了所有这些,它仍然不工作,检查该用户的到期:

Postgres密码认证失败