目录
我服务的客户近期要求对所有数据库进行安全整改,其中包括为所有用户设置PASSWORD_LIFE_TIME口令生存期。但在为SYSDBA修改参数时报如下错误:
普通用户是可以正常设置这个参数的。
下面我们创建一个临时库重现问题。
测试过程
创建一个新用户并修改PASSWORD_LIFE_TIME:
这是为什么呢?
下面的查询结果给出了答案:
系统为新创建的LIU用户默认赋予了10天宽限期,而SYSDBA用户则是无限期(0)。试想,如果无限期宽限,那么口令生存期还有意义吗?
因此为SYSDBA设置PASSWORD_LIFE_TIME报错。
然后我们可以先为SYSDBA分配一个PASSWORD_GRACE_TIME值,再修改PASSWORD_LIFE_TIME。这样就可以修改成功,如下图:
下面修改一下系统时间,将时间修改为30天后,使之超过PASSWORD_LIFE_TIME,但在宽限期内。验证设置是否生效
分别使用SYSDBA和LIU用户登录:
登录时提示已过期但在宽限期内。可以正常访问数据库。用户状态为EXPIRED(GRACE)
将时间再修改为10天后,使之超过PASSWORD_LIFE_TIME,并超过宽限期
分别使用SYSDBA和LIU用户登录:
这时登录时系统不再提示异常,但后续执行命令均宣告过期。
下面我们用本地认证(已提前设置)登录
查询数据字典中登记的状态为EXPIRED
值得庆幸地是用户过期后唯一可以执行的命令是修改自己的口令:
结论
修改SYSDBA用户的PASSWORD_LIFE_TIME之前需要先修改PASSWORD_GRACE_TIME。
口令过期但还在宽限期内,可以正常访问数据库。用户状态状态为EXPIRED(GRACE)。
口令过期并超过宽限期后,用户状态状态为EXPIRED。这时唯一可以执行的命令是修改密码。
SYSDBA用户过期并不影响“as sysdba”操作系统本地认证的正常登录。