金仓数据库KingbaseES用户密码有效期
关键字:
KingbaseES、安全、密码有效期、人大金仓、KingbaseES
密码有效期使用
Kingbase可以为用户设置密码有效期,用户密码超过指定时期之后限制用户登录并设置新密码。
Kingbase开启密码有效期检查功能需要加载插件" identity_pwdexp"。修改data目录下kingbase.conf文件中的shared_preload_libraries参数:" shared_preload_libraries = 'identity_pwdexp'",再重启数据库即可开启密码有效期检查。
密码有效期包含以下两个重要参数:
参数 | 类型 | 范围 | 默认值 | 描述 |
---|---|---|---|---|
identity_pwdexp.password_change_interval | INT | [1,INT_MAX] | 30 | 密码有效期 |
identity_pwdexp.max_password_change_interval | INT | [1,INT_MAX] | 30 | 最大密码有效期 |
identity_pwdexp.enable_common_user_autoset_interval | BOOL | \ | ON | 自动设置用户密码有效期 |
密码有效期表示用户密码的最大更换周期,创建或修改用户密码时,为用户设定的密码有效期必须晚于当前时间,并且早于当前时间加上更换周期得到的时间。
最大密码有效期用户限制密码有效期的范围,密码有效期不能大于最大密码有效期。
自动设置用户有效期开启后,在创建用户密码或者修改用户密码时,系统会自动为用户设置新的密码有效期,设置的时间为当前时间加上identity_pwdexp.password_change_interval设定的值。
启动数据库并登录后,运行"create extension identity_pwdexp;"加载密码口令有效期插件,使用show指令可以查看上表中的三个值,如下图。
此时,自动设置用户密码有效期为开启状态,创建或修改用户后,系统会自动为用户设置密码有效期,设置的时间为当前时间加上identity_pwdexp.password_change_interval设定的值,设置结果如下图:
关闭自动设置密码过期时间后,修改或创建用户密码时不会自动修改用户密码的有效期。只能通过valid until子句进行修改。
密码有效期实现原理
-
- 创建用户
在使用create user创建用户时,会在CreateRole函数中会通过hook进入密码有效期设置函数UserPwdExpSetExpire中。
函数首先会检查扩展插件是否正常启用,然后检查以下三项:
a. 是否创建的是超级用户。
b. 是否开启自动设置用户密码有效期。
c. 是否带valid until子句。
若三项都为否,则返回直接返回空值,不设置密码有效期。
接下来检查语法,检查用户的密码和valid until子句,创建用户时必须设置密码才能使用valid until子句设置密码有效期。只有密码有效期identity_pwdexp.password_change_interval为0时,才能设置用户的密码有效期为"infinity"。
最后,如果使用valid until子句设置了有效期,则会检查时间是否超出限制,若没有设置,则会以identity_pwdexp.password_change_interval作为默认值作为有效期。将计算结果返回CreateRole函数,计入系统表sys_authid中。
-
- 修改用户密码有效期
在使用alter user 修改用户时,会在AlterRole函数中通过hook进入密码有效期修改函数UserPwdExpChangeExpire中。
函数首先判断以下三项:
- 被修改用户是普通用户。
- 自动设置用户密码有效期没有开启。
- 没有通过valid until子句设置密码有效期。
若以上三点都满足,则不会进行密码有效期的设置。
然后检查扩展插件是否正常启用。
如果没有修改密码也没有修改密码有效期,则函数会直接返回空值。
接下里进行语法检查,如果用户原本没有密码,且执行alter user时也没有指定密码,则无法使用valid until子句为用户设置密码有效期。
若通过以上检查,则会计算并检查用户的密码有效期的时间,返回给AlterRole函数,并将其写入sys_authid表中。
-
- 登录检查密码有效期
用户进行密码登录时会进入函数authProcessAuth或CheckPasswdChallengeAuth中,随后会函数getRolePassword,在里面读取表sys_authid并获取用户的密码有效期与当前登录时间进行对比,得出用户密码是否过期的结果。
参考资料
用户手册3.2.2.4口令有效期设置