我尝试使用postgres用户从我的Windows机器登录到我的服务器与Pgadmin。
但它一直给我这个错误:
psql: FATAL: password authentication failed for user "postgres"
然后我尝试使用psql从命令行登录,这给了我同样的错误。然后,在将pg_hba.conf中的本地条目置于信任之后,我使用psql将密码重置为'test'。然后我将条目放回md5,并尝试使用密码'test'登录。
在psql中我使用了这些命令:
ALTER ROLE postgres WITH PASSWORD 'test';
ALTER ROLE postgres PASSWORD 'test';
ALTER USER postgres WITH PASSWORD 'test';
ALTER USER postgres PASSWORD 'test';
这个特殊的psql命令
\password
每次,我都将pg_hba.conf本地条目返回到md5,并尝试使用psql登录:
psql -U postgres
然后我被要求输入密码。输入'test'后,psql给出了与前面提到的相同的错误。
当然,我在每次更改pg_hba文件后重新启动postgresql。我正在使用psql和'su postgres'。
因此,即使我能够以通常的方式更改密码,也不接受密码。
我希望有人能够帮助我。
一些信息:
Postgresql 9.1 Ubuntu 12.04
Pg_hba文件(根据要求)
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
当我想修改密码时,我将top md5更改为trust。 我想提一下,这种配置以前没有问题。
的结果
sudo -u postgres psql -x -c "select * from pg_user where usename='postgres'"
是:
usename | postgres
usesysid | 10
usecreatedb | t
usesuper | t
usecatupd | t
userepl | t
passwd | ********
valuntil | 1970-01-01 00:00:00+01
useconfig |
答案 0 :(得分:74)
如最新编辑所示,密码有效期至1970年,这意味着它目前无效。 这解释了错误消息,这与密码不正确相同。
重置有效期:
ALTER USER postgres VALID UNTIL 'infinity';
在最近的一个问题中,另一个用户遇到了与用户帐户和PG-9.2相同的问题:
PostgreSQL - Password authentication fail after adding group roles
显然,有一种方法可以无意中为Unix时代设置伪造密码有效性(1970年1月1日,abstime
类型的最小可能值)。可能是,PG本身或某些客户端工具中的错误会导致这种情况。
编辑:原来是一个pgadmin错误。见https://dba.stackexchange.com/questions/36137/
答案 1 :(得分:9)
pg_hba.conf
条目按IP地址定义登录方法。您需要显示pg_hba.conf
的相关部分才能获得适当的帮助。
更改此行:
host all all <my-ip-address>/32 md5
反映您的本地网络设置。因此,如果您的IP为192.168.16.78
(C类)且掩码为255.255.255.0
,请将其设为:
host all all 192.168.16.0/24 md5
确保您的WINDOWS MACHINE在该网络192.168.16.0
中,然后重试。
答案 2 :(得分:8)
我遇到了这个问题,这里的答案对我没有用;我无法弄清楚为什么我无法登录并得到上述错误。
事实证明postgresql将用户名保存为小写,但在身份验证期间它使用大写和小写。
CREATE USER myNewUser WITH PASSWORD 'passWord';
将使用用户名&#39; mynewuser&#39;创建一个用户。和密码&#39; passWord&#39;。
这意味着您必须使用&#39; mynewuser&#39;进行身份验证,而不是使用&#39; myNewUser&#39;进行身份验证。对于像我这样的pgsql中的新手,这很令人困惑。我希望它可以帮助遇到这个问题的其他人。
答案 3 :(得分:0)
假设您具有可以进行超级用户访问的权限:
sudo -u postgres psql
如果由于数据库失败而失败,则此块不存在。
sudo -u postgres psql template1
然后 sudo nano /etc/postgresql/11/main/pg_hba.conf文件
local all postgres ident
对于PostgreSQL的较新版本,ident实际上可能是同级的。
在psql shell内,您可以为数据库用户postgres设置密码:
ALTER USER postgres PASSWORD 'newPassword';