PostgreSQL数据库安全加固(十二)——设置密码以哈希形式存储


前言

以明文形式存储,使用可逆加密或使用未加保留的哈希的数据库密码很容易受到未经授权的泄露。数据库密码在内部或外部存储到PostgreSQL时必须始终采用单向哈希的形式。

一、检查配置

1、要检查是否启用了密码加密,请以数据库管理员身份(此处显示为“postgres”)运行以下SQL。

# 切换至postgres账户
su - postgres
# 查询配置
psql -c "SHOW password_encryption"

在这里插入图片描述
如果password_encryption的值不为”md5”或” scram-sha-256”,则存在安全风险。
2、查看账户密码的存储形式。
以数据库管理员(此处显示为“postgres”)身份,运行以下SQL:

# 切换至postgres账户
su - postgres
#
psql -x -c "SELECT usename,passwd,valuntil FROM pg_shadow;"

如果任何密码是纯文本,则存在安全风险。
在这里插入图片描述

pg_shadow表字段说明

usename:pg_authid.rolname用户名
usesysid:用户的ID
usecreatedb:用户能否创建数据库
usesuper:用户是否为一个超级用户
userepl:用户可以开启流复制并将系统转入/转出备份模式。
usebypassrls:用户避开每个行级安全策略。
passwd:口令(可能被加密),如果没有则为空。关于加密口令如何存储请参见pg_authid。
valuntil:口令过期时间(仅用于口令认证)
useconfig	:运行时配置变量的会话默认值

二、加固建议

要启用password_encryption,请以数据库管理员身份编辑postgresql.conf配置文件。

$ su - postgres 
$ vi ${PGDATA?}/postgresql.conf 

如下图,将参考password_encryption改成scram-sha-256 或者md5.
在这里插入图片描述

修改完配置文件后,以系统管理员身份重新启动数据库或者重新加载配置文件。

# 重启数据库
pg_ctl restart
# 重新加载配置文件
pg_ctl reload

总结

如果使用密码进行身份验证,则PostgreSQL数据库必须仅存储密码的哈希形式。

猜你喜欢

转载自blog.csdn.net/ma286388309/article/details/129186023