Postgresql:用户"postgres"的密码验证失败

I15*_*159 366 postgresql ubuntu pgadmin

我安装了PostgreSQL 8.4,Postgres客户端和Pgadmin 3.对于控制台客户端和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"
Run Code Online (Sandbox Code Playgroud)

A.H*_*.H. 659

如果我没记错的话,默认情况下用户postgres没有在Ubuntu上设置DB密码.这意味着,您只能使用postgres 操作系统用户帐户登录该帐户.

假设您可以root访问该框,您可以执行以下操作:

sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)

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

sudo -u postgres psql template1
Run Code Online (Sandbox Code Playgroud)

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

local   all         postgres                          ident
Run Code Online (Sandbox Code Playgroud)

对于较新版本的PostgreSQL ident实际上可能是peer.那也没关系.

psqlshell中,您可以为DB用户 postgres提供密码:

ALTER USER postgres PASSWORD 'newPassword';
Run Code Online (Sandbox Code Playgroud)

您可以psql通过键入CtrlD或使用命令离开shell \q.

现在你应该能够为pgAdmin提供DB超级用户的有效密码,它也会很开心.:-)

  • 很好的一个.对于其他新用户,请勿在ALTER USER行结束时忘记SEMICOLON. (70认同)
  • @itsols您说:“非常好。对于其他新用户,请不要在ALTER USER行结束时忘记SEMICOLON” ...您刚刚结束了四个小时的磨难!我现在感到非常愚蠢和感激。:-D (3认同)
  • 注意,pg_hba.conf必须将postgres用户设置为`ident`才能使第一步工作。如果您已经将其设置为md5或其他名称,则将无法自动登录。 (2认同)
  • 从综合手册,https://www.postgresql.org/files/documentation/pdf/12/postgresql-12-A4.pdf,第 20.5 节:“如果没有为用户设置密码,则存储的密码是null 和该用户的密码身份验证将始终失败。”。因此,由于安装不要求输入密码,因此不会设置密码。这应该在每个教程中都提到,因为这是新用户要做的第一件事,尝试从一个漂亮的 GUI 进行连接...... (2认同)

Die*_*ego 130

员工的反应是正确的,但如果你想进一步自动化可以做到:

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

完成!您保存了User = postgres和password = postgres.

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

$ sudo passwd postgres

  • 如果您的密码包含“!”等有趣的字符,请小心 (4认同)

Mig*_*ira 41

这很令人沮丧,上面的大多数答案都是正确的,但他们没有提到你必须重新启动数据库服务才能使pg_hba.conf文件中的更改生效.

所以,如果你做了类似上面的事情

本地所有postgres身份

然后以root身份重启(在centos上就像服务服务postgresql-9.2重启)现在你应该能够以用户postgres的身份访问数据库了

$ psql psql(9.2.4)输入"help"获取帮助.

Postgres的=#

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

  • 在ubuntu上输入:`sudo service postgresql restart` (23认同)
  • 对于RHEL7使用```sudo systemctl restart postgresql.service``` (3认同)

mes*_*lds 17

编辑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文件重新设置为默认值.

  • 如果您完全陷入困境,这是唯一有保证的方法。将所有方法更改为信任,重新启动 db,然后以 root 身份:`sudo su - postgres`,接下来为 postgres db 设置/修复/取消设置密码(以及在 shell 中,如果需要),然后恢复到安全的 `md5` 或 `ident ` 方法并再次重新启动以使值保持不变。顺便说一句,在 Cent/RedHat 9.4 上,该文件位于:`/var/lib/pgsql/9.4/data/pg_hba.conf` (3认同)

gee*_*ugi 12

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

切换到postgres用户

# su - postgres
Run Code Online (Sandbox Code Playgroud)

登录psql

# psql
Run Code Online (Sandbox Code Playgroud)

希望有所帮助

  • `su - postgres`在Ubuntu 16.04上的posgresql 9.5上要求输入密码 (3认同)
  • `su - postgres`是官方fedora [文档建议]的命令(https://fedoraproject.org/wiki/PostgreSQL#User_Creation_and_Database_Creation),但我也得到密码提示.为了解决这个问题,我遵循了这个[postgres论坛电子邮件](https://www.postgresql.org/message-id/4D958A35.8030501@hogranch.com),它使用与此处接受的答案相同的命令:`sudo -u postgres psql`.不要忘记初始化并启动数据库服务器. (3认同)

小智 12

进入 postgres shell 后,输入此命令

postgres=# \password postgres
Run Code Online (Sandbox Code Playgroud)

输入这个命令后会提示你设置密码,直接设置密码然后试试。


Loa*_*ron 12

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

sudo passwd postgres
Run Code Online (Sandbox Code Playgroud)

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


Jos*_* Kj 11

对于那些第一次使用它并且没有关于密码的信息的人,他们可以遵循以下步骤(假设您使用的是ubuntu):

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

     sudo vi pg_hba.conf 
    
    Run Code Online (Sandbox Code Playgroud)

    2.编辑以下行

     local   all             postgres                                peer
    
    Run Code Online (Sandbox Code Playgroud)

     local   all             postgres                                trust
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重启服务器

      sudo service postgresql restart
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后,您无需密码即可登录,如图所示最后,您无需密码即可登录,如图所示

请在此处获取更多信息


Fra*_*uga 10

尽量不要使用-W参数并将密码留空.有时用户使用无密码创建.

如果这不起作用重置密码.有几种方法可以做到这一点,但这适用于许多系统:

$ su root
$ su postgres
$ psql -h localhost
> ALTER USER postgres with password 'YourNewPassword';
Run Code Online (Sandbox Code Playgroud)


小智 7

古老的线程,但我在 2020 年浪费了半天时间来处理这个问题,所以这可能对某人有所帮助:仔细检查您的 postgres 端口(在 Ubuntu 上,它在 /etc/postgresql/9.5/main/postgresql.conf 中)。psql 客户端默认使用端口 5432,但在我的情况下,服务器在端口 5433 上运行。解决方案是在 psql 中指定 -p 选项(例如psql --host=localhost --username=user -p 5433 mydatabase)。

如果您不使用 --host 参数,psql 将通过套接字连接,这在我的情况下有效,但我的 Golang 应用程序(使用 TCP/IP)没有。不幸的是,错误消息是password authentication failed for user "user",这是误导性的。修复方法是使用带有端口的 url 连接字符串(例如postgres://user:password@localhost:5433/mydatabase)。

我的设置是 Digital Ocean 上的 Ubuntu 18.04,通过 apt-get 安装了 postgres 9.5,所以不确定为什么会发生这种情况。希望这可以为您节省一些时间。


ard*_*lez 5

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

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

sudo -u postgres -c "DROP ROLE superuser;"
Run Code Online (Sandbox Code Playgroud)

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