如何更改PostgreSQL用户密码?

1790

如何更改 PostgreSQL 用户的密码?


3
令人困惑的是,默认用户 的(字面)名称为 “postgres”。 *PostgreSQL 的默认用户名和密码是什么?*。 - Peter Mortensen
“postgres”是PostgreSQL的默认和特殊用户吗? - Peter Mortensen
值得注意的是,“postgres”是默认的注册用户。运行psql时使用的默认用户是当前的shell用户(echo $USER)。当当前的shell用户不是“postgres”时,我们需要使用sudo -u postgres psql以“postgres”的身份登录到psql中。此外,请注意,我们无法将当前的shell用户切换为“postgres”,因为该帐户默认已被锁定 - M Imam Pratama
29个回答

2457

无需密码登录:

sudo -u user_name psql db_name

如果您忘记了密码,可以进行密码重置:

ALTER USER user_name WITH PASSWORD 'new_password';

215
这会让用户的postgresql命令历史记录中出现明文密码。 - greg
214
@greg:所以删除它:rm ~/.psql_history - RickyA
80
题外话,但如果有人正在寻找“如何更改用户名”,可以执行 ALTER USER myuser RENAME TO newname; ...由于某种原因,当我在谷歌搜索时,它会指向我这里 :) - equivalent8
16
为什么你同时使用“”和‘’引号?我的意思是,它们有所区别,在DML查询中处理字符串时必须使用',但在这里使用两者是否有特殊原因? - Boyan
13
用户是一个对象,而不是一个字符串。与 ALTER TABLE "table_name" 或甚至 SELECT * FROM "table_name" 进行比较。在这些上下文中,您不能在表中使用单引号,对于用户/角色也是如此。 - P Daddy
显示剩余17条评论

1222

要更改PostgreSQL用户密码,请按照以下步骤进行:

  1. log in into the psql console:

    sudo -u postgres psql
    
  2. Then in the psql console, change the password and quit:

    postgres=# \password postgres
    Enter new password: <new-password>
    postgres=# \q
    

或者使用查询:

ALTER USER postgres PASSWORD '<new-password>';

或者在一行中

sudo -u postgres psql -c "ALTER USER postgres PASSWORD '<new-password>';"

注意:

如果这不起作用,可以通过编辑/etc/postgresql/9.1/main/pg_hba.conf(路径可能有所不同)重新配置身份验证,并更改以下内容:

local     all         all             peer # change this to md5

为了

local     all         all             md5 # like this

然后重新启动服务器:

sudo service postgresql restart

4
默认的postgres密码是什么?我不小心把它改了,有可能重置吗? - Saad
3
(在 psql 9.2 中)如果我输入\p,它会给我密码;如果我输入\password postgres,它会先给出密码,然后警告\p extra argument "assword" ignored; \p extra argument "postgres" ignored - David LeBauer
33
这比将密码保留在SQL命令历史记录中要好得多。 - otocan
4
在Linux上更改postgres用户的密码:sudo passwd postgres - Punnerud
1
@Punnerud,_"在Linux上更改postgres用户的密码:sudo passwd postgres"_ 天哪!我太困惑了。Postgres和Linux都有相同的用户。我是新手使用Postgres,并在新的Django网站中使用它。我需要备份数据库,并选择了5个随机教程,但都没有很好地解释。长话短说,这解决了密码问题,所以我可以进行备份。 - xtian
显示剩余6条评论

139

我认为更改密码的最佳方法就是简单地使用:

\password

在Postgres控制台中。

根据ALTER USER文档

使用该命令指定未加密密码时必须格外小心。密码以明文形式传输到服务器,并且可能还会记录在客户端的命令历史或服务器日志中。psql包含一个命令\password,可用于更改角色的密码而不暴露明文密码。

注意:ALTER USERALTER ROLE的别名


24
这也可以用来更改其他用户的密码:\password用户名 - Martin
它无法找到密码(在Linux上)。 - Coliban
1
@Coliban,在运行它时,您需要在“psql”提示符下。 - Andrew
@Andy:是的,但是由于某种原因,psql没有连接到数据库。我安装了一个新版本并设置了新密码,现在没问题了。谢谢。 - Coliban
1
这对我有用,由于某些原因,我无法运行 ALTER USER 命令。 - Developer-Person
这对我有用,ALTER USER不行..谢谢! - Ammar Faris

132

你可以并且应该对用户的密码进行加密:

ALTER USER username WITH ENCRYPTED PASSWORD 'password';

76
这个关键字在当前版本中并不重要。从 https://www.postgresql.org/docs/current/static/sql-createrole.html 中可以得知:密码始终以加密形式存储在系统目录中。ENCRYPTED 关键字没有影响,但为了向后兼容而被接受。 - John29
14
注意!@John29的评论仅适用于Postgresql 10及以上版本。对于所有其他版本,ENCRYPTED标志很重要。 - phep
1
未加密的密码可能被 psql 历史记录或 shell 记住... 如何使用哈希(例如 SHA1)密码? - Peter Krauss
@PeterKrauss 你可能会对这个问答感兴趣。 - spume

52

修改密码:

 sudo -u postgres psql

然后

\password postgres

现在输入新密码并确认。

然后输入\q退出。


3
如果我这样做,它会提示输入密码。 - Coliban

52

要使用Linux命令行更改密码,请使用:

sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"

9
请记住,这可能会在您的命令历史记录中保存数据库用户密码。 - Pedro Cordeiro
4
可以在这里使用环境变量吗?我想在部署脚本中自动化这个过程。 - TheRealChx101
1
在终端中以空格开头输入命令,这样就可以避免将其记录在命令历史中。 - Brian Burns
在bash中,如果HISTCONTROL被设置为ignorespaceignoreboth,那么以空格开头的命令行不会被添加到历史记录中。 - Fernando Basso
在bash中,如果HISTCONTROL被设置为ignorespaceignoreboth,那么以空格开头的命令行不会被添加到历史记录中。 - undefined

35

前往您的PostgreSQL配置并编辑文件pg_hba.conf:

sudo vim /etc/postgresql/9.3/main/pg_hba.conf

然后更改此行:

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

然后通过“sudo”命令重启PostgreSQL服务。然后

psql -U postgres

您现在将进入并看到PostgreSQL终端。

然后输入

\password

并输入 PostgreSQL 默认用户的 密码。成功更改密码后,转到 pg_hba.conf 并将更改恢复为“md5”。

现在您已登录为

psql -U postgres

使用您的新密码。


它不起作用:user@user-NC10:~$ psql -U postgres psql:致命错误:用户“postgres”的对等身份验证失败 - G M
1
好的,执行另一种方法sudo su - postgrespsql您将进入终端,然后在那里更改密码,这是另一种方法。如果这对您有用,或者您需要完整的解释,请告诉我。 - Murtaza Kanchwala
我已经尝试过了,但是出现了另一个错误:/usr/bin/psql: 第19行: use: 命令未找到 /usr/bin/psql: 第21行: use: 命令未找到 /usr/bin/psql: 第23行: use: 命令未找到 /usr/bin/psql: 第24行: use: 命令未找到 /usr/bin/psql: psql: 第26行: 附近意外的标记 $version,' /usr/bin/psql: psql: 第26行: my ($version, $cluster, $db, $port, $host);' 感谢您的帮助! - G M

24

postgres 角色设置密码

sudo -u postgres psql

你将会得到以下类似的提示:

postgres=#

更改postgres用户的PostgreSQL密码

ALTER USER postgres WITH ENCRYPTED PASSWORD 'postgres';

您将会得到以下内容:

ALTER ROLE

为此,我们需要编辑 pg_hba.conf 文件。

(可以随意使用您选择的编辑器替换 nano。)

sudo nano /etc/postgresql/9.5/main/pg_hba.conf

pg_hba.conf 文件更新

查找一个未被注释的行(即不以 # 开头的行),其内容如下所示。空格可能略有不同,但单词应该保持一致。

    local   postgres   postgres   peer
to
    local   postgres   postgres   md5

现在我们需要重新启动PostgreSQL,以便更改生效

sudo service postgresql restart

17

postgres 用户请求新密码(不在命令中显示):

sudo -u postgres psql -c "\password"

16

如果您使用的是Windows操作系统。

打开pg_hba.conf文件,将md5更改为peer

打开命令提示符并键入psql postgres postgres

然后键入\password以提示输入新密码。

有关更多信息和详细步骤,请参见此Medium帖子


2
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。- 来自审查 - Brian Minton
感谢 @BrianMinton 的提醒。 - Timothy Macharia
4
我使用“trust”而不是“peer”,它对我起作用了。 - Soyuzbek Orozbek Uulu

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