Postgres password authentication fails
我尝试使用Postgres用户从我的Windows机器登录到我的服务器与Pgadmin。
但它一直给我这个错误:
1 | psql: FATAL: password authentication failed FOR USER"postgres" |
那么我尝试使用psql从命令行登录,这给了我同样的错误。然后,在将pg_hba.conf中的本地条目置于信任之后,我使用psql将密码重置为'test'。然后我将条目放回md5,并尝试使用密码'test'登录。
在psql中我使用了以下命令:
1 2 3 4 | ALTER ROLE postgres WITH PASSWORD 'test'; ALTER ROLE postgres PASSWORD 'test'; ALTER USER postgres WITH PASSWORD 'test'; ALTER USER postgres PASSWORD 'test'; |
而这个特殊的psql命令
1 | \password |
每次,我都将pg_hba.conf本地条目返回到md5,并尝试使用psql登录:
1 | psql -U postgres |
然后我被要求输入密码。输入'test'后,psql给出了与前面提到的相同的错误。
当然,我在每次更改pg_hba文件后重新启动postgresql。我正在使用psql和'su postgres'。
因此,即使我能够以通常的方式更改密码,也不接受密码。
我希望有人能够帮助我。
一些信息:
Postgresql 9.1
Ubuntu 12.04
Pg_hba文件(根据要求)
1 2 3 4 5 6 7 8 9 | LOCAL ALL postgres md5 LOCAL ALL ALL md5 # IPv4 LOCAL connections: host ALL ALL 127.0.0.1/32 md5 # IPv6 LOCAL connections: host ALL ALL ::1/128 md5 host ALL ALL <my-ip-address>/32 md5 |
当我想修改密码时,我将顶部的md5更改为trust。
我想提一下,这种配置之前没有问题。
结果
1 | sudo -u postgres psql -x -c"select * from pg_user where usename='postgres'" |
是:
1 2 3 4 5 6 7 8 9 | usename | postgres usesysid | 10 usecreatedb | t usesuper | t usecatupd | t userepl | t passwd | ******** valuntil | 1970-01-01 00:00:00+01 useconfig | |
如最新编辑所示,密码有效期至1970年,这意味着它目前无效。
这解释了错误消息,这与密码不正确相同。
重置有效期:
1 | ALTER USER postgres VALID UNTIL 'infinity'; |
在最近的一个问题中,另一个用户遇到了与用户帐户和PG-9.2相同的问题:
PostgreSQL - 添加组角色后密码验证失败
显然,有一种方法可以无意中为Unix时代设置伪造密码有效性(1970年1月1日,
编辑:它原来是一个pgadmin错误。请参阅https://dba.stackexchange.com/questions/36137/
改变这一行:
1 | host ALL ALL <my-ip-address>/32 md5 |
反映您的本地网络设置。所以,如果你的IP是
1 | host ALL ALL 192.168.16.0/24 md5 |
确保您的WINDOWS MACHINE位于该网络
我遇到了这个问题,这里的答案对我不起作用;我无法弄清楚为什么我无法登录并得到上述错误。
事实证明postgresql将用户名保存为小写,但在身份验证期间它使用大写和小写。
1 | CREATE USER myNewUser WITH PASSWORD 'passWord'; |
将使用用户名"mynewuser"和密码"passWord"创建用户。
这意味着您必须使用"mynewuser"进行身份验证,而不是使用"myNewUser"进行身份验证。对于像我这样的pgsql中的新手,这很令人困惑。我希望它可以帮助遇到这个问题的其他人。
假设你在盒子上有root权限,你可以这样做:
1 | sudo -u postgres psql |
如果失败,数据库"postgres"不存在此块。
1 | sudo -u postgres psql template1 |
然后
sudo nano /etc/postgresql/11/main/pg_hba.conf文件
1 | LOCAL ALL postgres ident |
对于较新版本的PostgreSQL,ident实际上可能是peer。
在psql shell中你可以给DB用户postgres一个密码:
1 | ALTER USER postgres PASSWORD 'newPassword'; |