Oracle

零停機時間輪換密碼

  • May 17, 2022

大問題:如何以零停機 (ZDT) 方式輪換 Oracle 數據庫中的密碼?

我目前的想法是輪換使用者。最初,我有MY_USER所有的桌子等等。我現在有:

CREATE USER MY_USER NO AUTHENTICATION;
GRANT CREATE SESSION TO MY_USER;

CREATE USER MY_USER_PROXY_1 IDENTIFIED BY "abc123";
GRANT CREATE SESSION TO MY_USER_PROXY_1;
ALTER USER MY_USER GRANT CONNECT THROUGH MY_USER_PROXY_1;

當我想輪換密碼時,我只需創建MY_USER_PROXY_2並將“連接通過”授權授予MY_USER. 這樣,應用程序可以繼續創建新連接,直到我使用新使用者部署它。由於“連接通過”,新使用者基本上與舊使用者相同,因此一切都應該繼續工作而不會大張旗鼓。之後,我可以停用MY_USER_PROXY_1或讓密碼正常過期

MY_USER如果有 1 個“物理”使用者 ( ) ,這似乎是一種合理的方法

但是,我已經在使用代理使用者進行多租戶。和以前一樣,但不是 1 個使用者,而是可能有數百個使用者通過同一個代理使用者:

CREATE USER TENANT_PROXY_1 IDENTIFIED BY "abc123";
GRANT CREATE SESSION TO TENANT_PROXY_1;

-- During tenant onboard
CREATE USER TENANT_1234 NO AUTHENTICATION;
GRANT CREATE SESSION TO TENANT_1234;
ALTER USER TENANT_1234 GRANT CONNECT THROUGH TENANT_PROXY_1;

創建的問題TENANT_PROXY_2是重新創建所有connect through授權。我可以遍歷所有使用者,例如“TENANT_%”並以這種方式應用授權,但在TENANT_PROXY_2創建並使用授權更新但在重新啟動應用程序以使用新代理使用者之前,這將始終是一個機會之窗。因此,當代理使用者輪換到時,它將添加授權TENANT_PROXY_1並因此失敗TENANT_PROXY_2

我嘗試使用角色(作為連接器和連接者),但看起來只支持使用者(是否可以根據角色配置 Oracle 的 CONNECT THROUGH?證實了這一點):

ALTER USER TENANT_1234 GRANT CONNECT THROUGH TENANT_PROXY_ROLE;
GRANT ROLE TENANT_PROXY_ROLE TO TENANT_PROXY_1;
-- or
ALTER ROLE TENANT_PROXY_ROLE GRANT CONNECT THROUGH TENANT_PROXY_1;
GRANT ROLE TENANT_PROXY_ROLE TO TENANT_1234;

我唯一的想法是在入職期間預先創建並向所有代理使用者應用授權,並TENANT_PROXY_1通過使用者手動循環。不那麼優雅,但似乎仍然合理TENANT_PROXY_N``N``N

我還嘗試了 2 級代理(例如,TENANT_PROXY_1[TENANT_PROXY[TENANT_1234]]TENANT_PROXY_1[TENANT_PROXY][TENANT_1234]),但這也是不行的

對這兩種解決方案有任何想法嗎?數據庫已經存在了幾十年,ZDT 密碼輪換問題是否有任何官方解決方案或模式?

確保您正在應用更新檔,因為從 19.12 開始可以進行密碼翻轉(從 21c 向後移植)

這允許您更新數據庫中的密碼,並有一個寬限期,您的應用程序仍然可以使用舊密碼進行連接。

Alter profile my_profile limit password_rollover_time 7;

Password my_user

Enter new password: ***

您仍然可以使用舊密碼 7 天,這樣您就可以處理您的應用程序配置和伺服器並一次重新啟動它們。

不要重新發明現有的輪子,而是檢查在 21c 中引入並向後移植到 19c 的逐步密碼翻轉選項。這實質上使舊密碼在 PASSWORD_ROLLOVER_TIME 配置文件參數設置的一段時間內可用,在此期間可以更新憑證引用以反映新密碼。在此期間,使用舊密碼的連接將繼續成功。

不錯的閱讀:https ://blogs.oracle.com/cloudsecurity/post/change-passwords-without-application-downtime

另外,不要忘記使用 oracle 錢包來儲存您的憑據。這樣做會使密碼更改變得更加容易,因為您只需要更改錢包和

$$ re $$分發新錢包$$ s $$.

引用自:https://dba.stackexchange.com/questions/312210