ChatGPT解决这个技术问题 Extra ChatGPT

'用户“postgres”的密码验证失败'

我已经安装了 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"
在我的情况下,连接失败是因为 password is too complex ...
请务必通读本页。我必须做几件事才能使它正常工作。首先是 ALTER step,然后是 editing my pg_hba.conf file,然后是 restarting postgres
还要确保您没有运行两个 Postgres 实例:一个在 Windows 上,一个在 Docker 上。 Docker 没有向我报告该端口已被占用。因此,该工具连接到 Windows 机器 Postgres,而在 Docker postgers 中,一切都很好。

B
Brian

如果我没记错的话,默认情况下,用户 postgres 在 Ubuntu 上没有设置 DB 密码。这意味着,您只能使用 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 shell 中,您可以给 DB 用户 postgres 一个密码:

ALTER USER postgres PASSWORD 'newPassword';

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

现在您应该能够为 pgAdmin 提供 DB 超级用户的有效密码,它也会很高兴。 :-)


请注意,pg_hba.conf 必须将 postgres 用户设置为 ident 才能使第一步工作。如果您已经将其设置为 md5 或其他内容,您将无法自动登录。
很不错的一个。对于其他新用户,不要忘记 ALTER USER 行末尾的分号。
@itsols 你说:“非常好。对于其他新用户,不要忘记 ALTER USER 行末尾的分号”......你刚刚结束了四个小时的磨难!我现在感到非常愚蠢和感激。 :-D
我不是那么新,我多次配置 PostgreSQL dbs,但我忘记了分号! ;) 再次 ;)
来自综合手册,postgresql.org/files/documentation/pdf/12/postgresql-12-A4.pdf,第 20.5 节:“如果没有为用户设置密码,则存储的密码为空,并且该用户的密码验证将始终失败。”。因此,由于安装不要求输入密码,因此没有设置密码。这应该在每个教程中说,因为这是新用户做的第一件事,尝试从一个漂亮的 GUI 连接......
D
Diego

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

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

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

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

$ sudo passwd postgres


如果您的密码包含有趣的字符,如“!”,请小心
由于您在更改用户密码时遇到了麻烦,一个好的做法是创建一个新用户和一个新密码:在 SQL 提示符下,它将是: postgres-# CREATE ROLE your_username WITH LOGIN CREATEDB ENCRYPTED PASSWORD '你的密码';可以在 stackoverflow.com/questions/2172569/… 中找到有关使用 postgres 用户的讨论
唯一对我有用的解决方案(Kali Linux 2020)
为我工作!!谢谢。请注意,我们需要设置用户名和密码,因为它在 knex.ts 或 js 文件中
A
Andronicus

这令人沮丧,上述大多数答案都是正确的,但他们没有提到您必须在 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 用户添加信息


在 ubuntu 上类型:sudo service postgresql restart
对于 RHEL7 使用 sudo systemctl restart postgresql.service
mac上呢?
对于 Mac,请在 SO stackoverflow.com/questions/7975556/… 上查看此问题
谢谢米格尔。我手动更改了密码,直到我重新启动 postgres 服务器,我的 pgAdmin 才连接到数据库。
s
stevek-pro

编辑 pg_hba.conf 文件,对于 /etc/postgresql/9.3/main/pg_hba.conf 上的 Debian 和 /var/lib/pgsql/9.4/data/pg_hba.conf 上的 Red Hat/IBM 衍生产品

将所有身份验证方法更改为信任。

更改 postgres 用户的 Linux 密码。

重新启动服务器。

使用 psql -h localhost -U postgres 登录并使用刚刚设置的 Unix 密码。

如果它有效,您应该使用 md5 或 ident 方法将 pg_hba.conf 文件重新设置为值并重新启动。


如果您完全陷入困境,这是唯一有保证的方法。将所有方法更改为信任,重新启动 db,然后以 root 身份:sudo su - postgres,下一个为 postgres db 设置/修复/取消设置密码(如果需要,在 shell 中),然后恢复到安全的 md5ident 方法和再次重新启动,使价值观保持不变。顺便说一句,在 Cent/RedHat 9.4 上,该文件位于:/var/lib/pgsql/9.4/data/pg_hba.conf
感谢 Papak,cent os 上的文件位置很有帮助。
J
Jose Kj

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

打开 /etc/postgresql/9.x/main 中的文件 pg_hba.conf sudo vi pg_hba.conf 2.编辑以下行 local all postgres peer to local all postgres trust 重新启动服务器 sudo service postgresql restart 最后您可以无需登录如图所示的密码

Ref here for more info


出现错误 W10 : Warning: Changing a readonly File 也无法打开文件进行写入
是的,忘了添加 sudo,我的错。
A
Alvaro Rodriguez Scelza

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

sudo passwd postgres

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


有趣的是我以前从未见过这个!在我看来,这是迄今为止更改密码的最简单方法。
F
Francisco Puga

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

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

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

a
ardilgulez

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

如果您需要 pgAdmin 的超级用户访问权限,请创建另一个超级用户。这样,如果该超级用户的凭据被泄露,您始终可以 ssh 进入实际的数据库主机并使用手动删除超级用户

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

这个经验法则的原因是什么?
这样您就永远不会让所有超级用户都受到威胁。
为 postgres 设置密码如何导致所有超级用户受到威胁?
设置密码不会导致所有超级用户都受到威胁,但不设置密码将保证您永远不会让所有超级用户都受到威胁。原因是:当您不设置密码时,postgres 用户的任何密码登录尝试都将被拒绝,而您仍然可以通过信任自己使用它。
D
Dino

进入 postgres shell 后,输入此命令

postgres=# \password postgres

输入此命令后会提示设置密码,只需设置密码然后尝试即可。


I
Iharob Al Asimi

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

切换到 postgres 用户

# su - postgres

登录到 psql

# psql

希望有帮助


su - postgres 在 Ubuntu 16.04 上的 posgresql 9.5 上要求输入密码
su - postgres是官方fedora documentation suggests的命令,但我也得到密码提示。为了解决这个问题,我遵循了这个 postgres forum email,它使用与此处接受的答案相同的命令:sudo -u postgres psql。不要忘记初始化并启动数据库服务器。
C
Chen Lim

古老的线程,但我在 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,所以不知道为什么会这样。希望这可以节省您一些时间。


J
Jitender Kumar

我在 Windows 10 上遇到了同样的错误。就我而言,当我设置 Postgres 时,我的 username 默认为 postgres。但是当我运行命令 psql 时,它显示我的 usernamejitender 这是我的机器名,我不知道为什么设置了这个用户名.

无论如何要解决它,我做了以下步骤:运行命令 psql --help

在输出中,寻找连接选项,在这里你会看到你的默认用户,在我的例子中它是 jitender。

您还将获得设置另一个用户名的命令,它应该是 psql --username postgres。您可以根据需要设置用户名,仅此而已,问题就解决了。


我发现我必须在每个人的命令上使用 --username=postgres 。例如 createdb --username=postgres mydb 这是超级烦人的。我尝试执行 psql --username 但这会出现数据库提示并且默认用户名没有更改。
S
Szeryf

如果您看到错误

FATAL:  password authentication failed for user "postgres"

如果您确定您的密码正确,请检查密码是否包含任何特殊字符,尤其是“%”或斜杠。在我的例子中,它是密码字符串中的“%”。删除此符号后,一切正常。


好像 ”!”通过 psql 连接时,输入密码会导致相同的问题,例如“%”
t
tokhi

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

# 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

f
frank

时光飞逝!

在版本 12 上,我必须在这里使用“密码”而不是“身份”:

local   all             postgres                                password

不使用 -h 选项进行连接。


ö
ömer faruk

首先是密码箱

ALTER USER postgres with encrypted password 'postgres';

然后服务重启:

sudo systemctl restart postgresql.service

结尾。


仅供参考 - 在 pg db docker 容器内运行第一个命令 - 改变用户...就足够了。无需重启服务
M
Mohamed Ahmed

按着这些次序 :

sudo -u postgres -i psql \密码 postgres

之后,输入您的密码两次。

然后在 pgAdmin4 中使用该密码。


C
Community

我只是想补充一点,您还应该检查您的密码是否已过期。

有关详细信息,请参阅 Postgres password authentication fails


请添加一些详细信息和该链接提供的内容的摘要,以防将来该链接不再存在。否则,这很可能被标记为低质量/仅链接的答案。
s
sɐunıɔןɐqɐp

就我而言,Ubuntu 20.04 Postgresql 12 使用了错误的端口。

我检查了 /etc/postgresql/12/main/postgresql.conf,发现它是 5433 而不是 5432


N
Niyongabo Eric

答案是@diego

我想添加一些关于我如何修复错误的解释,希望对其他人有所帮助:ERROR: password authentication failed for user "postgres"

在窗口

确保你下载了 Postgres 软件,安装它,创建并确认密码,并确保它没有复杂的符号和字符。

打开窗口,单击 SQL Shell (PSQL) 并访问它并创建数据库

创建连接字符串,如 postgres://postgres:your_password@localhost:port/your_database

在 WSL 上

关注Microsoft documentation

安装成功后

 // Open postgres
 su postgres
 
 // Type psql and hit enter
 psql

 // Create a user postgres if not exist or any other user you want 
 CREATE USER your_user_db WITH PASSWORD 'match_password_with_db_password';
 

 // Give user password same as the one you set up for postgres db
 ALTER USER your_user_db WITH PASSWORD 'match_password_with_db_password';

 // Restart the server
 sudo service postgresql restart

D
David Uvm

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

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

pg_hba.conf 没问题。

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

已解决 - 卸载 inutil 版本。


a
amoljdv06

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

解决方案:

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

希望它能解决你的问题

https://i.stack.imgur.com/FsLCZ.png


A
Aremu Ibrahim

这是由于缓存而发生的。

当你运行 php artisan config:cache 时,它会缓存配置文件。每当事情发生变化时,您都需要继续运行它以更新缓存文件。但是,如果您从不运行该命令,它将不会缓存。

这对于生产来说是可以的,因为配置不会经常更改。但是在登台或开发期间,您可以通过清除缓存来禁用缓存并且不要运行缓存命令

因此,只需运行 php artisan config:clear,并且不要运行之前的命令以避免缓存。

检查原帖

Password authentication failed error on running laravel migration


v
viggy28

就我而言,它的密码超过 100 个字符。将其设置为较小的字符密码有效。

实际上,我想知道某处是否有对此的参考。


M
Muhammad

请记住,如果您安装了两个版本的 Postgres,则需要卸载其中一个,在我的情况下,在 MacOS 上,我通过 .dmg 安装了一个版本,通过 brew 安装了一个版本。

对我有用的是使用以下步骤卸载通过 .dmg 安装的那个

转到/库/PostgreSQL/13。打开卸载-postgres.app。

然后尝试

psql postgres

它应该工作。


o
officialrahulmandal

给出的答案几乎是正确的,只是缺少一些我将在我的解决方案中处理的指针

首先确保您的用户具有 sudo 访问权限,如果没有,您可以使用以下命令将您的用户添加为 sudo 用户:-

sudo adduser <username> sudo

更改将在用户下次登录时生效。

i) 现在转到 sudo vim /etc/postgresql/<your_postgres_version>/main/pg_hba.conf 文件并查找显示以下内容的行:

local   all             postgres                                md5 #peer

并发表评论。在该行下方必须有一个注释行,上面写着:

local   all             postgres                                peer

或者对于旧版本,它将是:-

local   all         postgres                          ident

取消注释该行。

ii) 现在使用以下任何命令重新启动 postgres:-

sudo /etc/init.d/postgresql restart

或者

sudo service postgresql restart

iii) 现在您可以使用以下命令简单地登录 postgres:

sudo -u postgres psql

iv)一旦您进入,您可以创建任何您想要的操作,在我的情况下,我想创建一个新数据库,您可以使用以下命令执行相同操作:

CREATE DATABASE airflow_replica;

V
Vitor Oliveira

就我而言,它是如此简单!我在应用程序 JAVA Spring 中出错,因为我需要记住数据库超级用户,它在安装过程 PostgreSQL 期间显示,在我的情况下,数据源将是 postgres。所以,我正确地添加了名称并且它有效!


S
Sid

在任何文本编辑器中打开 pg_hba.conf(您可以在 postgres 安装文件夹中找到此文件);将所有方法字段更改为信任(这意味着您不需要 postgre 的密码);在你的控制台中运行这个命令:“alter user postgres with password '[my password]';” | psql -U postgres (意味着将用户的 [我的密码] 的一些用户密码作为参数 -U postgres 更改)等等(不要忘记将信任的方法改回最适合您的方法)

我希望有一天这对某人有所帮助。


C
Community

我希望这对你有帮助。您可以使用以下命令更改 postgres sql 的密码。

命令

sudo -u postgres psql

接下来您可以更新密码

命令

更改用户 postgres 密码“YOUR_NEW_PASSWORD”;


您的答案仅包含已添加的信息:stackoverflow.com/a/7696398/8283469