数据库国产化已替换如火如荼,作为DBA已运维多套“磐维”数据库,前几天登录我的运维账号,突然提示密码即将过期,需要修改密码。
DBAer赶紧排查了全量磐维数据库的密码设置,并详细研究了下磐维数据库的密码设置相关知识,整体来说跟ORACLE还是差异较大,粗糙总结如下,从ORACLE转磐维的DBA们可以注意了。
- pg_user中的valuntil列意思为账号的有效期,并非密码有效期,通过修改valuuntil起不到密码延期的作用的,这是一个容易误解的点,需要注意:
2.密码统一有效期参数设置查看password_effect_time参数,一般生产系统数据库安全基线要求密码有效期为90天。
3.作为DBA,需要关注用户密码还剩余多少天过期,同时配合业务开展密码修改。磐维数据库没有明确记录用户密码过期的时间,可以通过查询PG_AUTH_HISTORY表中passwordtime字段的最大值,并结合password_effect_time值来计算得出,具体可使用以下语句进行查询:
select b.rolname,b.oid,max(a.passwordtime) passwd_time,pg_catalog.intervaltonum(password_effct_time-(current_date -max(a.passwordtime))) left_time from pg_auth_history a,pg_roles b where a.roloid = b.oid group by b.rolname,b.oid order by 4;
复制
4.针对部分程序用户,考虑到修改密码可能影响应用程序的业务连续性,应用管理员可能希望程序用户可以密码长期有效,ORACLE中可以通过给用户指定一个profile来实现,但在磐维数据库中,目前暂未发现可对某个账号单独设置密码有效期的功能。
因磐维是基于openGauss开发的,通过openGauss原代码查询,密码过期用户登录后将只允许执行alter user ***命令,即只能做密码修改动作。
5.如何实现不改变密码来延长密码有效期呢?可以通过修改pg_auth_history表中passwordtime时间最大那条记录的时间,实现密码不变延长密码过期时间。pg_auth_history表中passwordtime最大的一条记录时间变为当前时间,代表当前密码失效时间又延长了一个password_effect_time周期,具体代码如下:
update pg_auth_history set passwordtime=now() where roloid=245095 and passwordtime=(select max(passwordtime)from pg_auth_history where roloid=245095 );
复制
当然,该方法仅作为DBA应急处理密码过期问题的办法,最科学的方法还是应该要求程序账号也定期修改密码。