更改数据库用户密码可能会对连接到数据库的应用程序造成很大的影响。通常,我们必须安排停机时间,以便我们可以更改数据库用户密码,然后通过大量应用程序服务层面的工作,更改其连接详细信息。
从Oracle 21c开始,我们可以定义一个逐步密码滚动更新时间,这使我们能够在逐步滚动的时间段内使用旧密码和新密码进行连接。这意味着我们可以更改数据库用户密码,并允许应用程序通过新旧密码进行连接,而无需对已有连接进行硬性切断。此功能已在Oracle 19.12 版本更新并向后移植到新版本。
- 创建测试用户
- 创建逐步数据库密码滚动更新配置文件
- 测试
- 视图
- 禁用逐步数据库密码滚动更新
- 警告
创建测试用户
我们连接到特权用户并创建测试用户。
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
--drop user testuser1 cascade;
create user testuser1 identified by testuser1 quota unlimited on users;
grant connect, resource to testuser1;
创建逐步数据库密码滚动更新配置文件
我们创建一个新的配置文件,将限制设置为 1 天,并将测试用户与此配置文件相关联。
-- drop profile pw_rollover_time_prof;
create profile pw_rollover_time_prof limit
password_rollover_time 1;
alter user testuser1 profile pw_rollover_time_prof;
我们还可以使用命令更改现有配置文件的限制。在以下示例中,我们将其设置为 1.5 天。
alter profile pw_rollover_time_prof limit
password_rollover_time 1.5;
最小值为 1 小时 (1/24),最长时间为 60 天。
测试
我们连接到测试用户并重置密码。
conn testuser1/testuser1@//localhost:1521/pdb1
alter user testuser1 identified by newpasswd1;
在接下来的1.5天内,我们可以使用旧密码和新密码进行连接。
conn testuser1/testuser1@//localhost:1521/pdb1
Connected.
SQL>
conn testuser1/newpasswd1@//localhost:1521/pdb1
Connected.
SQL>
视图
该视图包含一列,该列告诉我们用户当前是否处于滚动更新状态。下面的查询向我们显示了帐户的状态。
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
select account_status,
to_char(password_change_date, 'dd-mon-yyyy hh24:mi:ss') as password_change_date
from dba_users
where username = 'TESTUSER1';
ACCOUNT_STATUS PASSWORD_CHANGE_DATE
-------------------------------- -----------------------------
OPEN & IN ROLLOVER 15-oct-2021 09:22:43
SQL>
限制的值可从视图中获得,就像任何其他配置文件限制一样。
column resource_name format a25
column limit format a10
select resource_name,
limit
from dba_profiles
where profile = 'PW_ROLLOVER_TIME_PROF'
and resource_name = 'PASSWORD_ROLLOVER_TIME';
RESOURCE_NAME LIMIT
------------------------- ----------
PASSWORD_ROLLOVER_TIME 1.5
SQL>
禁用逐步数据库密码滚动更新
将限制设置为 0 将禁用逐步密码滚动更新。在以下示例中,我们将限制设置为0,会发现已经无法使用旧密码连接到测试用户了。
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
alter profile pw_rollover_time_prof limit
password_rollover_time 0;
conn testuser1/testuser1@//localhost:1521/pdb1
USER = testuser1
URL = jdbc:oracle:oci8:@//localhost:1521/pdb1
Error Message = no ocijdbc21 in java.library.path
USER = testuser1
URL = jdbc:oracle:thin:@//localhost:1521/pdb1
Error Message = ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
SQL>
警告
如果我们需要在紧急情况下禁用逐步密码滚动更新并重置,则必须确保这两个操作之间存在连接尝试,否则我们可能无法获得所需的密码重置。
我们重置滚动时间并再次更改密码。
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
alter profile pw_rollover_time_prof limit
password_rollover_time 1.5;
conn testuser1/newpasswd1@//localhost:1521/pdb1
alter user testuser1 identified by newpasswd2;
我们可以再次使用任一新密码进行连接。
conn testuser1/newpasswd1@//localhost:1521/pdb1
Connected.
SQL>
conn testuser1/newpasswd2@//localhost:1521/pdb1
Connected.
SQL>
此时将限制设置为 0天,然后立即返回设置为 1.5 天,这之间没有连接尝试动作。
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
alter profile pw_rollover_time_prof limit
password_rollover_time 0;
alter profile pw_rollover_time_prof limit
password_rollover_time 1.5;
如果在重置之间没有使用旧密码或新密码进行新的连接尝试,我们仍然可以使用两个密码进行连接。
conn testuser1/newpasswd1@//localhost:1521/pdb1
Connected.
SQL>
conn testuser1/newpasswd2@//localhost:1521/pdb1
Connected.
SQL>
希望本文对您有所帮助。
原文标题:Gradual Database Password Rollover Time (PASSWORD_ROLLOVER_TIME) in Oracle Database 19c and 21c
原文作者:Tim Hall
原文地址:https://oracle-base.com/articles/21c/gradual-database-password-rollover-time-21c
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




