人大金仓数据库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口令有效期设置

相关推荐
Raymond运维2 小时前
MariaDB源码编译安装(二)
运维·数据库·mariadb
沢田纲吉2 小时前
🗄️ MySQL 表操作全面指南
数据库·后端·mysql
RestCloud17 小时前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud18 小时前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence20 小时前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
DemonAvenger1 天前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化
AAA修煤气灶刘哥2 天前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
RestCloud2 天前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术2 天前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
可涵不会debug2 天前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库