在過去,更改資料庫密碼,總是會迫使應用程序必須暫時中止服務,
因為帳號的新舊密碼,總是無法共存一段時間,變更密碼後,帳號的舊密碼就立即停用,
而新密碼就馬上生效,這對業務持續的應用程序來說,中止服務只為了變更密碼,總會帶來一些困擾,
因此,在Oracle 19c 19.12的版本後,在Profile中導入了一個新的參數"PASSWORD_ROLLOVER_TIME",
來提供帳號新舊密碼的共存時間,提供了相對應的語法與view資訊,
除了CREATE PROFILE和ALTER PROFILE語句中的新子句PASSWORD_ROLLOVER_TIME之外,
ALTER USER語句還有一個新子句EXPIRE PASSWORD ROLLOVER PERIOD。
DBA_USERS和USER_USERS資料字典視圖的ACCOUNT_STATUS列具有幾個新狀態,
這些狀態指示值來顯示過渡狀態,
另外,通過查看Unified_audit_trail視圖的AUTHENTICATION_TYPE 列,
可以跟踪用戶以檢查他們使用的是舊密碼還是新密碼。
限制
無法為以下類型的連接啟用逐步數據庫密碼翻轉:
Oracle Real Application Security 用戶的直接登錄
基於 Kerberos、證書或 RADIUS 的外部身份驗證連接
集中管理的用戶 (CMU) 連接
使用外部密碼文件的管理連接
主數據庫和備用數據庫之間的 Oracle Data Guard 連接
要創建新的用戶配置文件:
SQL> CREATE PROFILE pwprofile LIMIT PASSWORD_ROLLOVER_TIME 1/24;
Profile created.
要更改現有用戶配置文件:
SQL> ALTER PROFILE existingProfile LIMIT PASSWORD_ROLLOVER_TIME 1;
Profile altered.
創建一個分配了新配置文件的新用戶:
SQL> CREATE USER newUser IDENTIFIED BY UserPassW__11 PROFILE pwprofile;
User created.
SQL> GRANT CREATE SESSION TO newUser;
Grant succeeded.
將配置文件分配給現有用戶:
SQL> ALTER USER existingUser PROFILE pwprofile;
User altered.
使用新創建的用戶登錄:
SQL> connect newUser/UserPassW__11@orclpdb
Connected.
更改用戶的密碼:
SQL> ALTER USER newUser IDENTIFIED BY UserPassW__22;
User altered
在 PASSWORD_ROLLOVER_TIME 定義的密碼翻轉週期內使用舊密碼或新密碼登錄都有效,
在我們的示例中為一小時:
SQL> connect newUser/UserPassW__11@orclpdb
Connected.
SQL> connect newUser/UserPassW__22@orclpdb
Connected.
查詢用戶的賬戶狀態:
SQL> SELECT account_status FROM dba_users WHERE username = 'NEWUSER';
ACCOUNT_STATUS
--------------------------------
OPEN & IN ROLLOVER
如果您在滾動期內再次更改密碼,則只有最新密碼和原始密碼(第一次更改前)有效。
提前結束滾動期:
SQL> ALTER USER newUser EXPIRE PASSWORD ROLLOVER PERIOD;
User altered.
現在,只有使用新密碼才能成功登錄:
SQL> connect newUser/UserPassW__11@orclpdb
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> connect newUser/UserPassW__22@orclpdb
Connected.
帳戶狀態更改為 OPEN:
SQL> SELECT account_status FROM dba_users WHERE username = 'NEWUSER';
ACCOUNT_STATUS
--------------------------------
OPEN
通過查看Unified_audit_trail視圖的 AUTHENTICATION_TYPE 列,可以跟踪用戶以檢查他們使用的是舊密碼還是新密碼:
SQL> select * from unified_audit_trail where action_name='LOGON' and authentication_type like '%VERIFIER=12C-OLD%' and event_timestamp>systimestamp-1;
AUTHENTICATION_TYPE
----------------------------------------------------------
...(LOGON_INFO=((VERIFIER=12C-OLD)(CLIENT_CAPABILITIES=...
SQL> select * from unified_audit_trail where action_name='LOGON' and authentication_type like '%VERIFIER=12C-NEW%' and event_timestamp>systimestamp-1;
AUTHENTICATION_TYPE
----------------------------------------------------------
...(LOGON_INFO=((VERIFIER=12C-NEW)(CLIENT_CAPABILITIES=...
https://database-heartbeat.com/2021/07/27/having-two-valid-database-user-passwords-at-the-same-time/
留言列表