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

相关推荐
YOU OU4 小时前
Redis基础常识与命令
数据库·redis·缓存
Database_Cool_6 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
爱写代码的阿森6 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_7 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白7 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面8 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧8 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈8 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy8 小时前
log4net 数据库存日志正确配置
数据库