Postgresql数据库二次开发,想当然的要增加与MD5、SCRAM-SHA-256相对应的SM3、SCRAM-SM3存储和认证算法。但是增加后有四种存储和认证算法共存,hba文件里的认证方法可以设置四种,但postgresql.conf里的password_encryption只能设置一种算法,这就导致存储和认证算法不一致导致认证失败,使用体验极差。
上一篇文章提出了开发md5-sm3 sm3-md5 scram-sha256-sm3 scram-sm3-sha256四种中和衔接认证算法,实际执行结果如下:
序号 | 设置认证算法 | 设置存储算法 | 实际使用认证算法 |
1 | MD5 | MD5 | MD5 |
2 | SM3 | SM3 | SM3 |
3 | SCRAM-SHA-256 | SCRAM-SHA-256 | SCRAM-SHA-256 |
4 | SCRAM-SM3 | SCRAM-SM3 | SCRAM-SM3 |
5 | MD5 | SCRAM-SHA-256 | SCRAM-SHA-256 |
6 | MD5 | SCRAM-SM3 | SCRAM-SM3 |
7 | SM3 | SCRAM-SHA-256 | SCRAM-SHA-256 |
8 | SM3 | SCRAM-SM3 | SCRAM-SM3 |
9 | SCRAM-SHA-256 | MD5 | 认证失败 |
10 | SCRAM-SHA-256 | SM3 | 认证失败 |
11 | SCRAM-SM3 | MD5 | 认证失败 |
12 | SCRAM-SM3 | SM3 | 认证失败 |
13 | MD5 | SM3 | MD5-SM3 |
14 | SM3 | MD5 | SM3-MD5 |
15 | SCRAM-SHA-256 | SCRAM-SM3 | SCRAM-SHA256-SM3 |
16 | SCRAM-SM3 | SCRAM-SHA-256 | SCRAM-SM3-SHA256 |
今天再提出一种更简单的处理方式:存储多个加密密码(由不同存储算法加密)。
具体就是,当设置password_encryption为:
1、md5:保存md5 sm3 scram-sha-256 scram-sm3四种算法加密的四个加密密码;
2、sm3:保存sm3 scram-sha-256 scram-sm3三种算法加密的三个加密密码;
3、scram-sha-256:保存scram-sha-256 scram-sm3两种算法加密的两个加密密码;
4、scram-sm3:保存scram-sha-256 scram-sm3两种算法加密的两个加密密码;
这样,当hba配置的认证算法是哪种算法就去提取哪种算法加密的加密密码去完成认证,如果hba配置的认证算法比实际存储的每一个加密密码算法安全性较低,则自动选取安全性更高的认证算法。上面的各种算法安全性由低到高默认为:md5<sm3<scram-sha-256=scram-sm3