问题描述
安装 PostgreSQL 数据库时,会创建一个与初始化数据库时的操作系统用户同名的数据库用户,这个用户是数据库的超级用户,在此 OS 用户下登录数据库时,因为执行的是操作系统认证,所以是不需要用户名和密码的,这样不是很安全,那么如何修改配置文件让用户登录的时候输入密码?
问题分析
pg_hba.conf使用控制用户访问的认证配置文件,本地连接的认证配置格式如下:
local database user auth-method [auth-options]
可以通过修改 auth-method 认证方法为 md5 来要求用户登录时候输入口令密码。
解决方案
自建PostgreSQL实例
- 为默认用户 postgres 修改自定义的密码
[postgres@iv-ebgymdaodpe2tgjofpe5 pgdata]$ psql
psql (12.10)
Type "help" for help.
#修改最高权限用户postgres的账号密码
postgres=# alter role postgres with password 'xxxxx';
ALTER ROLE
postgres=# \q
- 修改配置文件并验证生效
#修改pg_hba.conf文件前的文件内容
[postgres@iv-ebgymdaodpe2tgjofpe5 pgdata]$ cat pg_hba.conf | egrep -v "^#|^$"
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
#修改后的文件,修改trust为md5
[postgres@iv-ebgymdaodpe2tgjofpe5 pgdata]$ cat pg_hba.conf | egrep -v "^#|^$"
local all all md5
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
- 重新加载配置文件并验证生效
#重新加载配置文件
[postgres@iv-ebgymdaodpe2tgjofpe5 pgdata]$ pg_ctl -D /data/pgdata -l logfile reload
server signaled
#再次登录的时候,可以看到需要输入用户名密码提示"Password for user postgres:"
[postgres@iv-ebgymdaodpe2tgjofpe5 pgdata]$ psql
Password for user postgres:
psql (12.10)
Type "help" for help.
postgres=#
RDS for PostgreSQL
火山引擎 RDS for PostgreSQL 默认采用用户名密码配置,对于创建用户,修改用户密码等操作,您均可以在控制台上完成,屏蔽了上述复杂的操作步骤。您可以参考下图进行相关配置
参考文档
http://www.postgres.cn/docs/12/auth-pg-hba-conf.html 如果您有其他问题,欢迎您联系火山引擎技术支持服务