如何更改PostgreSQL用户密码
技术背景
在使用PostgreSQL数据库时,出于安全或管理需求,常常需要更改用户密码。不同的操作系统和使用场景下,更改密码的方法有所不同。同时,为了确保密码安全,还需考虑加密和配置文件的设置。
实现步骤
登录无密码登录
若要无密码登录,可以使用以下命令:
1
| sudo -u user_name psql db_name
|
忘记密码时重置
在 psql
控制台中执行以下命令重置密码:
1
| ALTER USER user_name WITH PASSWORD 'new_password';
|
更改密码的常见步骤
方法一:使用 \password
命令
- 登录到
psql
控制台:
- 在
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系统下更改密码
- 更改目录到
PostgreSQL
安装文件夹的 /bin
目录:
1
| C:\Program Files\PostgreSQL\<version>\bin
|
- 以超级用户身份连接到
PostgreSQL
服务器:
- 运行以下命令更改超级用户密码:
1
| ALTER USER postgres WITH PASSWORD 'new_password';
|
核心代码
使用 ALTER USER
命令更改密码
1
| ALTER USER user_name WITH PASSWORD 'new_password';
|
使用 \password
命令交互更改密码
使用MD5哈希值更改密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
[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();
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';
|