暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

Oracle 用户密码过期

原创 哇哈哈 2022-12-02
1837

文章中介绍了两种使用户密码在 N 天后过期的方法。第一个不提供宽限时间,另一个提供宽限时间供用户考虑。

1、密码立即过期,没有宽限时间
2、密码在 N 天后过期并有宽限时间

密码立即过期,没有宽限时间

“立即”是指“立即生效”。在一些紧急的安全事件中,需要立即使用户的密码失效。这意味着没有宽限时间,必须在登录数据库后立即更改密码。

使用ALTER USER PASSWORD EXPIRE语句使用户的密码立即过期。

SQL> alter user hr password expire;
User altered.

受影响的用户将收到ORA-28001:登录数据库时密码已过期。必须当场更改自己的密码,否则进一步的行动将无处可去。

密码在 N 天后过期并有宽限时间

对于有很多用户的数据库,应该以更慎重的方式使他们的密码过期。

在这种情况下,可以为用户提供了3天的修改密码的宽限期,用户可以在宽限期内花时间思考新密码。配置文件中设置的宽限时间参数也称为PASSWORD_GRACE_TIME

更改 PASSWORD_GRACE_TIME

该步骤是可选的。如果profile中PASSWORD_GRACE_TIME的值已经是一个特定的数字,比如7天,那么可以跳过这一步。

在这里,将profile中的PASSWORD_GRACE_TIME的值更改为 3 天。

SQL> show user
USER is "SYS"
SQL> select username, profile from dba_users where username in ('HR', 'OE', 'SH') order by 1, 2;

USERNAME   PROFILE
---------- ----------
HR         APP_USER
OE         APP_USER
SH         APP_USER

SQL> alter profile app_user limit password_grace_time 3;

Profile created.

请在发出ALTER PROFILE语句之前记住PASSWORD_GRACE_TIME的原始值,以便稍后将其改回。

设置到期日期

这一步是整个过程的关键。我们通过直接更新表SYS.USER$中的EXPTIME将用户的过期时间设置为 3 天后。

SQL> update user$ set exptime = sysdate + 3, ltime = null, lcount = 0, astatus = 18, spare6 = systimestamp at time zone 'UTC' where name in ('HR', 'OE', 'SH');

3 rows updated.

SQL> commit;

Commit complete.

不要忘记提交您的更改。之后,用户登录数据库时会看到一条警告消息:

C:\Users\edchen>sqlplus hr/hr@orclpdb
...
ERROR:
ORA-28002: the password will expire within 3 days

3 天后,宽限时间用完,他们看到一条不同的错误消息:

C:\Users\edchen>sqlplus hr/hr@orclpdb
...
ERROR:
ORA-28001: the password has expired

Changing password for hr
New password:

改回 PASSWORD_GRACE_TIME

如果您跳过了第 1 步,那么您也可以跳过这一步。

3 天后,我们可以将PASSWORD_GRACE_TIME改回原来的限制。例如:

SQL> alter profile app_user limit password_grace_time unlimited;

Profile altered.

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论