人大金仓数据库KingbaseES-用户密码有效期

金仓数据库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子句进行修改。

密码有效期实现原理

    1. 创建用户

在使用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中。

    1. 修改用户密码有效期

在使用alter user 修改用户时,会在AlterRole函数中通过hook进入密码有效期修改函数UserPwdExpChangeExpire中。

函数首先判断以下三项:

  1. 被修改用户是普通用户。
  2. 自动设置用户密码有效期没有开启。
  3. 没有通过valid until子句设置密码有效期。

若以上三点都满足,则不会进行密码有效期的设置。

然后检查扩展插件是否正常启用。

如果没有修改密码也没有修改密码有效期,则函数会直接返回空值。

接下里进行语法检查,如果用户原本没有密码,且执行alter user时也没有指定密码,则无法使用valid until子句为用户设置密码有效期。

若通过以上检查,则会计算并检查用户的密码有效期的时间,返回给AlterRole函数,并将其写入sys_authid表中。

    1. 登录检查密码有效期

用户进行密码登录时会进入函数authProcessAuth或CheckPasswdChallengeAuth中,随后会函数getRolePassword,在里面读取表sys_authid并获取用户的密码有效期与当前登录时间进行对比,得出用户密码是否过期的结果。

参考资料

用户手册3.2.2.4口令有效期设置

相关推荐
Ka1Yan16 小时前
MySQL索引优化
开发语言·数据结构·数据库·mysql·算法
TDengine (老段)16 小时前
TDengine 时间函数 TIMETRUNCATE 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Mors.17 小时前
dbeaver工具连接inceptor星环数据库
数据库
TG_yunshuguoji18 小时前
阿里云国际代理:阿里云的云数据库是什么?
服务器·数据库·安全·阿里云·云计算
huazhixuthink19 小时前
PostgreSQL三种关闭方式的区别
数据库·postgresql
阿里小阿希1 天前
Vue3 + Element Plus 项目中日期时间处理的最佳实践与数据库设计规范
数据库·设计规范
白鹭1 天前
MySQL源码部署(rhel7)
数据库·mysql
666和7771 天前
Struts2 工作总结
java·数据库
还听珊瑚海吗1 天前
SpringMVC(一)
数据库