openGauss源码解析(192)

openGauss源码解析:安全管理源码解析(3)

9.2.2 口令存储

口令是安全认证过程中的重要凭证。openGauss数据库在执行创建用户或修改用户口令操作时,会将口令通过单向哈希方式加密后存储在pg_authid系统表中。口令加密的方式与参数“password_encryption_type”的配置有关,目前系统支持MD5、SHA256 + MD5(同时存储SHA256和MD5哈希值)和SHA256三种方式,默认采用SHA256方式加密。为兼容PostgreSQL社区和第三方工具,openGauss保留了MD5方式,但此方式安全性较低不推荐用户使用。

口令的加密方式与认证方式密切相关,选择不同的加密方式需要对应的修改“pg_hba.conf”配置文件中的认证方式。口令加密与认证方式对应关系如表9-1所示。

表9-1 口令加密与认证方式

password_encryption_type

加密方式

(hash算法)

认证方式

(pg_hba.conf)

加密函数接口

0

MD5

MD5

pg_md5_encrypt

1

SHA256 + MD5

SHA256或MD5

calculate_encrypted_combined_password

2(默认值)

SHA256

SHA256

calculate_encrypted_sha256_password

创建用户和修改用户属性的函数入口分别为CreateRole和AlterRole。在函数内对口令加密前会先校验是否满足口令复杂度,如果满足则调用calculate_encrypted_password函数实现口令的加密。加密时根据参数password_encryption_type配置选择对应的加密方式,加密完成后会清理内存中的敏感信息并返回口令密文。口令加密流程如图9-6所示。

图9-6 口令加密流程图

如图9-6所示,通过调用calculate_encrypted_sha256_password函数实现sha256加密方式、通过调用pg_md5_encrypt函数实现md5方式,而calculate_encrypted_combined_password函数则融合了前面两种加密方式,加密后系统表中包含了sha256和md5两种哈希值。实现sha256加密的calculate_encrypted_sha256_password函数执行流程如图9-7所示。

图9-7 calculate_encrypted_sha256_password函数执行流程

posted @ 2024-05-06 10:45  openGauss-bot  阅读(5)  评论(0编辑  收藏  举报