kingbase金仓数据库的密码有效期和密码复杂度

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 SYSTEM
 
select 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 SYSTEM
 
select 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 SYSTEM
 
select 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 0
 
ALTER USER u_pwd PASSWORD '1234567890ab';
ERROR:  Password should contain at least 3 letter and the current
number is 2
 
ALTER 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 SYSTEM
 
select 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 0
 
ALTER 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 SYSTEM
 
select 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 1
 
ALTER USER u_pwd PASSWORD '1234567890abc./';
ALTER ROLE


注意事项

修改密码策略参数后需要执行SELECT sys_reload_conf();使新配置生效

部分配置可能仅在创建或修改用户密码时生效,不会影响已有用户

要强制用户下次登录时修改密码:

检查用户密码过期时间和状态
SELECT usename, valuntil, useconfig FROM sys_user;
密码策略的具体参数名称在不同版本中可能略有差异,建议参考对应版本的官方文档

posted @ 2025-09-18 16:36  爱冻  阅读(106)  评论(0)    收藏  举报