Postgresql:用户“ postgres”的密码身份验证失败


431

我已经安装了PostgreSQL 8.4,Postgres客户端和Pgadmin3。控制台客户端和Pgadmin的用户“ postgres”的身份验证失败。我已经输入了用户“ postgres”和密码“ postgres”,因为它以前可以工作。但是现在身份验证失败。我之前几次都没​​有出现此问题。我该怎么办?那会发生什么呢?

psql -U postgres -h localhost -W
Password for user postgres: 
psql: FATAL:  password authentication failed for user "postgres"
FATAL:  password authentication failed for user "postgres"

1
就我而言,由于密码太复杂而导致连接失败...
JJD

3
请务必通读本页面的所有内容。我必须做几件事才能使它正常工作。首先,执行ALTER步骤,然后编辑我的pg_hba.conf文件,然后重新启动postgres
elrobis


还要确保您没有运行两个Postgres实例:一个在Windows上,一个在Docker中。Docker没有向我报告该端口已被占用。因此,该工具连接到Windows机器Postgres,而在Docker postgers中,一切都很好。
koppor19年

Answers:


749

如果我没记错的话,默认情况下,用户在Ubuntu上postgres没有设置数据库密码。这意味着,您只能使用postgres OS用户帐户登录到该帐户。

假设您具有root访问权限,则可以执行以下操作:

sudo -u postgres psql

如果失败并显示database "postgres" does not exists错误,那么您很可能不在Ubuntu或Debian服务器上:-)在这种情况下,只需添加template1以下命令:

sudo -u postgres psql template1

如果这些命令中的任何一个因错误而失败,psql: FATAL: password authentication failed for user "postgres"则检查文件/etc/postgresql/8.4/main/pg_hba.conf:必须有这样的行作为第一行非注释行:

local   all         postgres                          ident

对于PostgreSQL的较新版本,ident实际上可能是peer。也可以

psql外壳内,您可以为数据库用户 postgres提供密码:

ALTER USER postgres PASSWORD 'newPassword';

您可以psql通过键入CtrlD或使用命令来离开外壳\q

现在您应该可以为pgAdmin提供一个数据库超级用户的有效密码,这也将很高兴。:-)


更好,谢谢!psql是可行的。但是pgadmin3仍然有问题-它要求我为系统根用户提供密码。(对我来说很奇怪)pg_hba.conf就像您说的那样。
I159 2011年

我要添加,然后使用“ \ q”退出控制台。花了我一段时间才发现:)
hakunin 2012年

2
注意,pg_hba.conf必须将postgres用户设置为ident第一步才能工作。如果您已经将其设置为md5或其他名称,则将无法自动登录。
塞林2013年

80
很好 对于其他新用户,请不要在ALTER USER行的末尾忘记SEMICOLON。
itsols

3
@itsols您说:“非常好。对于其他新用户,请不要在ALTER USER行结束时忘记SEMICOLON” ...您刚刚结束了四个小时的磨难!我现在感到非常愚蠢和感激。:-D
Frozenjim

147

工作人员的回答是正确的,但是如果您想进一步自动化,可以这样做:

$ sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"

做完了!您保存了用户= postgres和密码= postgres。

如果您没有User postgres ubuntu的密码,请执行以下操作:

$ sudo passwd postgres


小心密码是否包含有趣的字符,例如“!”。
Brian Peterson

45

令人沮丧的是,以上大多数答案都是正确的,但是它们没有提到在pg_hba.conf文件中的更改生效之前,您必须重新启动数据库服务

因此,如果您如上所述进行更改:

local all postgres ident

然后以root身份重新启动(在centos上类似service service postgresql-9.2 restart),现在您应该能够以用户postgres的身份访问数据库

$psql
psql (9.2.4)
Type "help" for help.

postgres=# 

希望这可以为新的postgres用户添加信息


26
在ubuntu上输入: sudo service postgresql restart
Ann Kilzer 2013年

4
供RHEL7使用sudo systemctl restart postgresql.service
Spechal

1
在Mac上呢?
AustinT '16

1
对于Mac,收银台上的SO这个问题stackoverflow.com/questions/7975556/...
Rohith Nandakumar

谢谢米格尔。我手动更改了密码,直到重新启动postgres服务器,我的pgAdmin才连接到数据库。
乌斯丁

20

编辑pg_hba.conf文件,例如 sudo emacs /etc/postgresql/9.3/main/pg_hba.conf

将所有身份验证方法更改为trust。更改“ postgres”用户的Unix密码。重新启动服务器。登录psql -h localhost -U postgres并使用刚刚设置的Unix密码。如果可行,您可以将pg_hba.conf文件重新设置为默认值。


1
如果您完全陷入困境,这是唯一可以保证的方法。将所有方法更改为信任,然后重新启动db,然后以root用户身份:sudo su - postgrespostgres db的下一个设置/修复/取消设置密码(如果需要,在外壳中),然后恢复为安全md5ident方法,然后再次重新启动,以保持值不变。顺便说一句,在Cent / RedHat 9.4上,文件位于:/var/lib/pgsql/9.4/data/pg_hba.conf
PapaK

17

对于那些第一次使用它并且不知道密码是什么的人,可以按照以下步骤操作(假设您使用的是ubuntu):

  1. 打开文件的pg_hba.conf/etc/postgresql/9.x/main

     sudo vi pg_hba.conf 

    2.编辑下面的行

     local   all             postgres                                peer

     local   all             postgres                                trust
  2. 重新启动服务器

      sudo service postgresql restart
  3. 最后,您无需密码即可登录,如图所示最后,您无需密码即可登录,如图所示

引用这里获取更多信息


12

如果您尝试以postgres用户身份登录postgres shell,则可以使用以下命令。

切换到postgres用户

# su - postgres

登录到psql

# psql

希望能有所帮助


3
su - postgres要求在Ubuntu 16.04上的posgresql 9.5上输入密码
Prashanth Chandra

3
su - postgres是官方fedora 文档建议的命令,但我也收到密码提示。为了解决这个问题,我遵循了此postgres论坛电子邮件,该电子邮件使用与此处接受的答案相同的命令:sudo -u postgres psql。不要忘记初始化并启动数据库服务器。
icc97

11

尝试不使用-W参数,并将密码保留为空白。有时,用户创建时没有密码。

如果这样不起作用,请重置密码。有几种方法可以执行此操作,但这在许多系统上都有效:

$ su root
$ su postgres
$ psql -h localhost
> ALTER USER postgres with password 'YourNewPassword';

7

根据经验:您永远都不要为POSTGRES用户设置密码

如果您需要pgAdmin的超级用户访问权限,请设置另一个超级用户。这样,如果该超级用户的凭据受到破坏,则您始终可以将ssh放入实际的数据库主机中,并使用以下命令手动删除该超级用户

sudo -u postgres -c "DROP ROLE superuser;"

1
这种经验法则是什么原因?
Gershom

2
这样一来,您就永远无法拥有所有超级用户。
ardilgulez

1
如何为postgres设置密码会导致所有超级用户受到威胁?
Gershom

4
设置密码不会导致所有超级用户都受到威胁,但不设置密码将确保您永远不会让所有超级用户都受到破坏。原因是:当您不设置密码时,任何对postgres用户的密码登录尝试都将被拒绝,而您仍然可以自己信任使用它。
ardilgulez

7

进入postgres shell后,输入以下命令

postgres=# \password postgres

输入此命令后,将提示您设置密码,只需设置密码,然后尝试。


3

当您安装postgresql时,没有为用户postgres设置密码,您必须使用以下命令在Unix上显式设置它:

sudo passwd postgres

它将询问您的sudo密码,然后提示您输入新的postgres用户密码。 资源



0

这是我尝试登录的一些组合:

# login via user foo
psql -Ufoo -h localhost

sudo -u postgres psql postgres

# user foo login to postgres db
psql -Ufoo -h localhost -d postgres

0

我有一个类似的问题。Ubuntu让我使用超级用户的任何密码登录控制台。除了我在psql line命令中与-h localhost连接时。

我也观察到“ localhost:8080 / MyJSPSiteLogIn”显示:致命:用户“ user”的验证错误。

pg_hba.conf还可以。

我注意到在同一服务中运行了两个版本的postgres。

已解决-卸载inutil版本。


0

我曾经遇到过类似的问题。访问任何数据库时,在PGAdmin中更新密码“用户“ postgres”的密码验证失败”后,出现以下提示


解:

  1. 关闭postgres服务器
  2. 重新运行pgadmin
  3. pgadmin将要求输入密码。
  4. 请输入提及用户的当前密码

希望它能解决您的问题

在此处输入图片说明


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.