如何更改PostgreSQL用户密码

如何更改PostgreSQL用户密码

技术背景

在使用PostgreSQL数据库时,出于安全或管理需求,常常需要更改用户密码。不同的操作系统和使用场景下,更改密码的方法有所不同。同时,为了确保密码安全,还需考虑加密和配置文件的设置。

实现步骤

登录无密码登录

若要无密码登录,可以使用以下命令:

1
sudo -u user_name psql db_name

忘记密码时重置

psql 控制台中执行以下命令重置密码:

1
ALTER USER user_name WITH PASSWORD 'new_password';

更改密码的常见步骤

方法一:使用 \password 命令

  1. 登录到 psql 控制台:
1
sudo -u postgres psql
  1. psql 控制台中,更改密码并退出:
1
2
3
postgres=# \password postgres
Enter new password: <new-password>
postgres=# \q

方法二:使用查询语句

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

方法三:单行命令

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

配置文件修改

如果上述方法不起作用,需要编辑 /etc/postgresql/9.1/main/pg_hba.conf(路径可能不同),将认证方式更改为 md5

1
local     all         all             peer # change this to md5

改为

1
local     all         all             md5 # like this

1
host    all    all    0.0.0.0/0    md5 # like this

然后重启服务器:

1
sudo service postgresql restart

Windows系统下更改密码

  1. 更改目录到 PostgreSQL 安装文件夹的 /bin 目录:
1
C:\Program Files\PostgreSQL\<version>\bin
  1. 以超级用户身份连接到 PostgreSQL 服务器:
1
psql -U postgres
  1. 运行以下命令更改超级用户密码:
1
ALTER USER postgres WITH PASSWORD 'new_password';

核心代码

使用 ALTER USER 命令更改密码

1
ALTER USER user_name WITH PASSWORD 'new_password';

使用 \password 命令交互更改密码

1
\password <username>

使用MD5哈希值更改密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Bash中生成MD5哈希值
echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'

# PowerShell中生成MD5哈希值
[PSCredential] $Credential = Get-Credential
$StringBuilder = New-Object System.Text.StringBuilder
$null = $StringBuilder.Append('md5');
[System.Security.Cryptography.HashAlgorithm]::Create('md5').ComputeHash([System.Text.Encoding]::ASCII.GetBytes(((ConvertFrom-SecureStringToPlainText -SecureString $Credential.Password) + $Credential.UserName))) | ForEach-Object {
$null = $StringBuilder.Append($_.ToString("x2"))
}
$StringBuilder.ToString();

# 使用MD5哈希值更改密码
ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';

最佳实践

  • 使用加密密码:在更改密码时,建议使用 ENCRYPTED 关键字,确保密码以加密形式存储。
1
ALTER USER username WITH ENCRYPTED PASSWORD 'password';
  • 避免明文传输:使用 \password 命令在 psql 控制台中更改密码,避免明文密码在网络中传输或记录在日志中。
  • 定期备份配置文件:在修改 pg_hba.conf 等配置文件之前,先进行备份,以防配置错误导致数据库无法正常访问。

常见问题

更改密码后仍无法登录

  • 检查 pg_hba.conf 文件中的认证方式是否正确配置为 md5 或其他支持密码认证的方式。
  • 确认密码是否正确输入,注意区分大小写。

明文密码记录在日志中

  • 检查日志配置,避免记录包含明文密码的 DDL 语句。
  • 使用MD5哈希值的方式更改密码,避免明文密码传输。

用户名包含特殊字符

如果用户名包含句号或其他标点符号,需要使用双引号将用户名括起来:

1
ALTER USER "username.lastname" WITH PASSWORD 'password';

如何更改PostgreSQL用户密码
https://119291.xyz/posts/how-to-change-postgresql-user-password/
作者
ww
发布于
2025年5月26日
许可协议