PostgreSQL:在Ubuntu上重置PostgreSQL密码

129

我在Ubuntu系统中安装了PostgreSQL数据库并为该服务器创建了一个超级用户。

如果我忘记了postgresql超级用户的密码,我该如何为该用户重置密码?

我尝试卸载并重新安装,但之前创建的超级用户得到保留。

1个回答

297

假设您是机器管理员,Ubuntu已授予您使用sudo以任何用户身份运行任何命令的权利。
同时,假设您没有在/etc/postgresql/9.1/main目录下的pg_hba.conf文件中限制权限,则应将以下行作为第一条规则:

# Database administrative login by Unix domain socket  
local   all             postgres                                peer

(关于文件位置: 9.1 是主要的Postgres版本,main 是您的“集群”的名称。如果使用更新版本的Postgres或非默认名称,则会有所不同。使用命令pg_lsclusters获取您的版本/系统的此信息)。

无论如何,如果pg_hba.conf文件中没有该行,请编辑该文件,添加它,并使用sudo service postgresql reload重新加载服务。

然后,您应该能够使用此shell命令以postgres超级用户身份登录:psql

sudo -u postgres psql

进入psql后,输入以下SQL命令:

ALTER USER postgres PASSWORD 'newpassword';

在此命令中,postgres 是超级用户的名称。如果忘记密码的用户是 ritesh,则该命令将如下所示:

ALTER USER ritesh PASSWORD 'newpassword';

参考资料:PostgreSQL 9.1.13 文档,第19章:客户端身份验证

请记住,在末尾只需输入 S 的单词是 postgres

如果在命令历史记录或服务器日志中以明文形式留下密码是个问题,psql提供了一种交互式元命令来避免这个问题,作为 ALTER USER ... PASSWORD的替代方法:

\password username

它通过双盲输入要求密码,然后根据password_encryption设置对其进行散列,并使用散列版本的密码而不是明文版本向服务器发出ALTER USER命令。


2
我使用了你的方法,我的超级用户名是ritesh,我的pg_hba.conf与你所提到的一样。我运行了命令“ALTER USER postgres PASSWORD 'newpassword' ;”,控制台显示“ALTER ROLE”。然后我使用ctrl+c退出,之后我运行了一个createuser命令。它要求输入密码,我输入了newpassword,但是它给了我一个错误:“createuser: could not connect to database postgres: FATAL: password authentication failed for user "ritesh" ”。如何创建用户?这个命令应该用什么密码? - mathlearner
如果您想更改 ritesh 的密码,请将上面的 SQL 更改为 ALTER USER ritesh PASSWORD 'newpassword' - Daniel Vérité
1
无需重新启动,只需使用pg_ctl reload。 - hbn
如果密码修改后没有生效,我该怎么办?我已经使用\password postgres命令设置了密码为qwe123,但在执行sudo apt update命令并输入密码时,出现了错误提示Sorry, try again. - EgoPingvina
@EgoPingvina:“抱歉,请重试”是sudo命令的一条消息。sudo要求输入的密码是您的shell账户密码。使用\password postgres设置的密码是数据库账户密码。这两个密码是独立的。 - Daniel Vérité
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接