1. 问题

如何设置KingbaseES数据库用户密码复杂度?

2. 什么是密码复杂度?

KingbaseES数据库密码复杂度是指密码的最小长度密码中所包含的数字、英文字母、特殊符号的数目

数据库管理员在设置密码复杂度后,KingbaseES数据库可以在创建和修改用户时,自动对用户密码进行相关方面的检查。如果密码不满足指定的条件,那么创建/修改用户将不成功。

3. KingbaseES用户密码的复杂度管理

KingbaseES数据库通过插件的方式来进行密码的复杂度管理。这种方式更为灵活,当数据库的实用场景需要进行密码的复杂度管理时,加载插件即可。而不需要该功能时,卸载插件即可。

KingbaseES中通过 4 个全局级参数配合插件来实现用户密码复杂度管理。

3.1. 加载插件

KingbaseES数据库通过修改 kingbase.conf文件中 shared_preload_libraries 参数来加载插件:

shared_preload_libraries = 'passwordcheck'

加载插件后,需要重启数据库,创建插件:

create extension passwordcheck;
CREATE EXTENSION

3.2. 配置密码复杂度参数

3.2.1.打开密码复杂度开关

复杂度开关通过参数passwordcheck.enable配置,默认为关闭状态。

显示当前数据库密码复杂度开关的状态:

show passwordcheck.enable;
passwordcheck.enable
----------------------
off
(1 行记录)

打开密码复杂度开关:

alter system set passwordcheck.enable=on;
ALTER SYSTEM

重新读取kingbase.conf文件:

select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 行记录)

显示当前数据库密码复杂度开关的状态:

show passwordcheck.enable;
passwordcheck.enable
----------------------
on
(1 行记录)

3.2.2.设置密码的长度

KingbaseES用户密码的长度通过passwordcheck.password_length参数配置,取值范围为[8,63],缺省为 8。

显示当前密码的长度:

SHOW passwordcheck.password_length;
passwordcheck.password_length
-------------------------------
8
(1 row)

设置用户密码的长度为10:

SET passwordcheck.password_length = 10;

显示当前密码的长度:

SHOW passwordcheck.password_length;
passwordcheck.password_length
-------------------------------
10
(1 row)

3.2.3.设置密码中含字母的个数

KingbaseES用户密码中含字母的个数通过参数passwordcheck.password_condition_letter配置,取值范围为[2,61],缺省为 2。

显示当前密码中含字母的个数:

SHOW passwordcheck.password_condition_letter;
passwordcheck.password_condition_letter
-----------------------------------------
2
(1 row)

设置用户密码中含3个字母:

SET passwordcheck.password_condition_letter = 3;

显示当前密码中含字母的个数:

SHOW passwordcheck.password_condition_letter;
passwordcheck.password_condition_letter
-----------------------------------------
3
(1 row)

3.2.4.设置密码中含数字的个数

KingbaseES用户密码中含数字的个数通过参数passwordcheck.password_condition_digit配置,取值范围为[2,61],缺省为 2。

显示当前密码中含数字的个数:

SHOW passwordcheck.password_condition_digit;
passwordcheck.password_condition_digit
----------------------------------------
2
(1 row)

设置用户密码中含3个数字:

SET passwordcheck.password_condition_digit = 3;

显示当前密码中含数字的个数:

SHOW passwordcheck.password_condition_digit;
passwordcheck.password_condition_digit
----------------------------------------
3
(1 row)

3.2.5.设置密码中含特殊字符的个数

KingbaseES用户密码中含特殊字符的个数通过参数passwordcheck.password_condition_punct配置,取值范围为[0,59],缺省为 0。其中特殊符号为除空白符、英文字母、单引号和数字外的所有可见字符。

显示当前密码中含特殊字符的个数:

SHOW passwordcheck.password_condition_punct;
passwordcheck.password_condition_punct
----------------------------------------
0
(1 row)

设置用户密码中含2个特殊字符:

SET passwordcheck.password_condition_punct = 2;

显示当前密码中含特殊字符的个数:

SHOW passwordcheck.password_condition_punct;
passwordcheck.password_condition_punct
----------------------------------------
2
(1 row)

3.3. 卸载插件

当不需要用户密码复杂度管理功能时,用户可通过修改 kingbase.conf 文件中 shared_preload_libraries 参数,卸载插件:

shared_preload_libraries = ''

卸载插件时,重启数据库后方生效。