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

相关推荐
Ai 编码助手1 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员1 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle1 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻1 小时前
MySQL排序查询
数据库·mysql
萧鼎1 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^1 小时前
数据库连接池的创建
java·开发语言·数据库
荒川之神1 小时前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle
IT培训中心-竺老师2 小时前
Oracle 23AI创建示例库
数据库·oracle
小白学大数据2 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
time never ceases2 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle