Kingbase金仓数据库提供了密码有效期和复杂度配置功能,可以通过以下方式进行设置:
一. 密码有效期配置
插件identity_pwdexp
identity_pwdexp是KingbaseES的一个扩展插件,用于设置口令有效期。
KingbaseES的用户管理中含有口令有效期这一属性,用户密码过期检查就是通过设置用户密码的有效期,在用户密码过期后限制用户登录数据库,并输入新密码的功能。
KingbaseES通过插件的方式来进行用户密码过期检查。这种方式更为灵活,当数据库的实用场景需要进行用户密码过期检查时,加载插件即可。而不需要该功能时,卸载插件即可。
插件identity_pwdexp加载方法
在使用 identity_pwdexp 之前,需要将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库。
shared_preload_libraries = 'identity_pwdexp' # (change requires restart)
插件identity_pwdexp的参数配置
1、identity_pwdexp.password_change_interval
- 密码有效期,单位是天,取值范围为[1,INT_MAX],缺省为 30。
- 参数只能在postmaster启动或由安全管理员通过SQL语言(alter命令)进行设置。
- 语句Alter system set 参数名 = 参数值;
- 修改后再运行select sys_reload_conf();不用重启服务器,对所有数据库及连接立即生效。
- 指定密码创建用户时,可通过 valid until 选项指定该用户的密码有效期,指定的密码有效期必须晚于当前时间且早于更换周期。 identity_pwdexp.password_change_interval 指定的时间。
- 对已创建成功且已拥有密码的用户,也可通过alter语句的 valid until 选项修改其密码有效期,但仅安全管理员有这个权限,其它用户无法修改自己及他人的口令更换周期。
- 若在创建用户或修改用户密码时未显示的通过 valid until 选项指定该用户的密码有效期,那么系统会根据 identity_pwdexp.password_change_interval参数设定的值自动为其计算密码有效期。
2、identity_pwdexp.max_password_change_interval
- 最大密码有效期,单位是天,取值范围为[1,INT_MAX],缺省为30。
- 参数只能在postmaster启动或由安全管理员通过SQL语言(alter命令)进行设置。
- 此参数用于限制密码有效期的设置范围,当设置的密码有效期大于最大密码有效期时,系统会报错提示。
查看当前密码有效期设置
SELECT name, setting, unit FROM sys_settings WHERE name LIKE '%password%life%' OR name LIKE '%pwd%life%';
示例
-- 创建扩展
\c test system
create extension identity_pwdexp;
CREATE EXTENSION -- 设置密码有效期是5天
\c test sso
show identity_pwdexp.password_change_interval; identity_pwdexp.password_change_interval
------------------------------------------30
(1 row)
alter system set identity_pwdexp.password_change_interval = 5;
ALTER SYSTEM
show identity_pwdexp.password_change_interval; identity_pwdexp.password_change_interval
------------------------------------------ 30
(1 行记录) select sys_reload_conf(); sys_reload_conf
----------------- t
(1 行记录) show identity_pwdexp.password_change_interval; identity_pwdexp.password_change_interval
------------------------------------------ 5
(1 行记录) \c test system
call now(); now
------------------------------- 2020-04-30 15:34:30.408304+08
(1 行记录) CREATE USER u_pwd_et PASSWORD '1234567890abC/.' VALID UNTIL '2020-05-01';
CREATE ROLE SELECT USENAME, VALUNTIL FROM SYS_USER WHERE USENAME = 'u_pwd_et'; usename | valuntil
----------+------------------------ u_pwd_et | 2020-05-01 00:00:00+08
(1 行记录) ALTER USER u_pwd_et PASSWORD '/.1234567890abC';
警告: user "u_pwd_et" does not be locked
ALTER ROLE SELECT USENAME, VALUNTIL FROM SYS_USER WHERE USENAME = 'u_pwd_et'; usename | valuntil
----------+------------------------------- u_pwd_et | 2020-05-05 15:35:23.448381+08
(1 行记录)
二. 密码复杂度配置
插件passwordcheck
passwordcheck插件主要用于管理口令复杂度。
口令的复杂度检查是由数据库安全员对口令的最小长度,所包含的数字、英文字母、特殊符号的数目进行设置后,在数据库管理员创建和修改用户时,自动对口令进行相关方面的检查。如果口令不满足指定的条件,那么创建用户将不成功。
KingbaseES通过插件的方式来进行口令的复杂度管理。这种方式更为灵活,当数据库的实用场景需要进行口令的复杂度管理时,加载插件即可。而不需要该功能时,卸载插件即可。
插件passwordcheck加载方式
在使用 passwordcheck 之前,需要将其添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库使配置生效。
shared_preload_libraries = 'passwordcheck'
插件passwordcheck的参数配置
passwordcheck.enable | 口令复杂度开关,默认为关闭状态。 |
---|---|
passwordcheck.password_length | 口令的最小长度,取值范围为[8,63],缺省为 8。 |
passwordcheck.password_condition_letter | 口令至少包含几个字母,取值范围为[2,61],缺省为 2。 |
passwordcheck.password_condition_digit | 口令至少包含几个数字,取值范围为[2,61],缺省为 2。 |
passwordcheck.password_condition_punct | 口令至少包含几个特殊字符,取值范围为[0,59],缺省为0。其中特殊符号为除空白符、英文字母、单引号和数字外的所有可见字符。 |
查看当前密码复杂度策略
SELECT name, setting FROM sys_settingsWHERE name LIKE '%password%' AND (name LIKE '%complex%' OR name LIKE '%length%');
示例
-- 打开口令复杂度开关\c test system
create extension passwordcheck;
CREATE EXTENSION\c test sso
show passwordcheck.enable;passwordcheck.enable
----------------------
off
(1 行记录)alter system set passwordcheck.enable=on;
ALTER SYSTEMselect sys_reload_conf();sys_reload_conf
-----------------
t
(1 行记录)show passwordcheck.enable;passwordcheck.enable
----------------------
on
(1 行记录)-- 修改口令最小长度为10\c test sso
SHOW passwordcheck.password_length;passwordcheck.password_length
-------------------------------8
(1 row)alter system set passwordcheck.password_length = 10;
ALTER SYSTEMselect sys_reload_conf();sys_reload_conf
-----------------
t
(1 行记录)SHOW passwordcheck.password_length;passwordcheck.password_length
-------------------------------10
(1 row)\c test system
CREATE USER u_pwd PASSWORD '123ab';
ERROR: password length 5 is too short, should be longer than min
password length 10.CREATE USER u_pwd PASSWORD '1234567890ab';
CREATE ROLE-- 修改口令最少包含3个字母\c test sso
SHOW passwordcheck.password_condition_letter;passwordcheck.password_condition_letter
-----------------------------------------2
(1 row)alter system set passwordcheck.password_condition_letter = 3;
ALTER SYSTEMselect sys_reload_conf();sys_reload_conf
-----------------
t
(1 行记录)SHOW passwordcheck.password_condition_letter;passwordcheck.password_condition_letter
-----------------------------------------3
(1 row)\c test system
ALTER USER u_pwd PASSWORD '1234567890';
ERROR: Password should contain at least 3 letter and the current
number is 0ALTER USER u_pwd PASSWORD '1234567890ab';
ERROR: Password should contain at least 3 letter and the current
number is 2ALTER USER u_pwd PASSWORD '1234567890abC';
ALTER ROLE-- 修改口令最少包含3个数字\c test sso
SHOW passwordcheck.password_condition_digit;passwordcheck.password_condition_digit
----------------------------------------2
(1 row)alter system set passwordcheck.password_condition_digit = 3;
ALTER SYSTEMselect sys_reload_conf();sys_reload_conf
-----------------
t
(1 行记录)SHOW passwordcheck.password_condition_digit;passwordcheck.password_condition_digit
----------------------------------------3
(1 row)\c test system
ALTER USER u_pwd PASSWORD 'abcdefghij';
ERROR: Password should contain at least 3 digit and the current
number is 0ALTER USER u_pwd PASSWORD 'abcdefghij123';
ALTER ROLE-- 修改口令最少包含3个特殊字符\c test sso
SHOW passwordcheck.password_condition_punct;passwordcheck.password_condition_punct
----------------------------------------0
(1 row)alter system set passwordcheck.password_condition_punct = 2;
ALTER SYSTEMselect sys_reload_conf();sys_reload_conf
-----------------
t
(1 行记录)SHOW passwordcheck.password_condition_punct;passwordcheck.password_condition_punct
----------------------------------------2
(1 row)\c test system
ALTER USER u_pwd PASSWORD '1234567890abc.';
ERROR: Password should contain at least 2 punct and the current
number is 1ALTER USER u_pwd PASSWORD '1234567890abc./';
ALTER ROLE
注意事项
修改密码策略参数后需要执行SELECT sys_reload_conf();使新配置生效
部分配置可能仅在创建或修改用户密码时生效,不会影响已有用户
要强制用户下次登录时修改密码:
检查用户密码过期时间和状态
SELECT usename, valuntil, useconfig FROM sys_user;
密码策略的具体参数名称在不同版本中可能略有差异,建议参考对应版本的官方文档