如何防止 Amazon RDS for Oracle 資料庫執行個體的主要使用者帳戶遭到鎖定?
我想要防止 Amazon Relational Database Service (Amazon RDS) for Oracle 資料庫執行個體的主要使用者帳戶遭到鎖定。
解決方案
Amazon RDS 中的主要使用者帳戶對於監控、管理和執行管理任務,以便操作您的資料庫執行個體至關重要。此帳戶是您的第一個資料庫帳戶,其中包含維護和操作資料庫所需的管理角色和權限。如需主要使用者針對每個資料庫引擎取得的權限和角色完整清單,請參閱主要使用者帳戶權限。如果主要使用者帳戶遭到鎖定且您無法登入,則您的管理能力會中斷,且您的關鍵業務營運可能會受到影響。您可以使用 Amazon RDS 主控台或不同的資料庫帳戶,來重新取得主要帳戶的存取權。
識別根本原因
鎖定主要使用者帳戶的常見原因之一是,將自訂描述檔設定套用至主要帳戶。其中一些設定包括下列項目:
- **FAILED_LOGIN_ATTEMPTS︰**當登入主要帳戶的連續失敗次數超過為此參數設定的值時,帳戶會被鎖定。
- **PASWORD_LIFE_TIME:**當使用特定密碼的持續時間超過為此參數設定的值時,無法使用該密碼登入帳戶,且帳戶會標示為過期。您必須重設密碼才能再次登入。如果您為 PASWORD_GRACE_TIME 設定值,且密碼未在寬限期內變更,則密碼會過期,並拒絕進一步的連線。
- **INACTIVE_ACCOUNT_TIME:**如果主要帳戶在此參數定義的連續天數內未登入資料庫,則會鎖定該帳戶。此參數的最小值為 15 天。沒有最大值。
如需密碼參數的詳細資訊,請參閱 Oracle 文件以取得 password_parameters。
執行下列查詢,檢查主要使用者帳戶的目前描述檔設定,以識別帳戶被鎖定的原因:
SELECT profile, resource_name, limit FROM dba_profiles WHERE resource_type = 'PASSWORD' AND profile IN ( SELECT profile FROM dba_users WHERE username = 'EXAMPLE-MASTER-USERNAME' );
範例:
假設您使用 FORED_LOGIN_TES 設定建立描述檔,該設定僅允許輸入一個不正確的密碼。
SQL> CREATE PROFILE sec_profile LIMIT FAILED_LOGIN_ATTEMPTS 1; Profile created.
您可以執行下列查詢,將此描述檔套用至主要使用者:
SQL> ALTER USER EXAMPLE-MASTER-USERNAME PROFILE sec_profile; User altered.
與資料庫中斷連線,然後退出 SQL*Plus:
SQL> exit Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.12.0.0.0
使用不正確的密碼登入帳戶:
bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:16:33 2021 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied
不允許進一步登入,因為 FAILED_LOGIN_ATTEMPTS 設定為 1。而您會收到下列錯誤訊息:
bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:16:44 2021 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. ERROR: ORA-28000: The account is locked.
當主要帳戶受到 PASWORD_LIFE_TIME 參數限制,且使用相同密碼的持續時間超過此參數設定的值時,在您嘗試登入時,您會看到下列錯誤訊息:
-bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 20:14:03 2021 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. ERROR: ORA-28001: the password has expired
解除鎖定主要帳戶
您可以使用下列其中一種方式解除鎖定主要帳戶:
使用 Amazon RDS 主控台或 AWS Command Line Interface (AWS CLI)
透過重設密碼,您可以解除鎖定帳戶,並在過期後重新開啟帳戶。如需詳細資訊,請參閱如何重設 Amazon RDS 資料庫執行個體的主要使用者密碼以解除鎖定主要使用者?
使用不同的資料庫帳戶
如果您已經有另一個資料庫帳戶 (例如,EXAMPLE-USER) 具有 ALTER USER 權限,則您可以使用該帳戶來解除鎖定的主要使用者帳戶。
執行下列查詢,以識別具有 ALTER USER 權限的帳戶:
SELECT grantee, privilege FROM dba_sys_privs WHERE privilege = 'ALTER USER' AND grantee IN ( SELECT username FROM dba_users WHERE oracle_maintained = 'N' );
輸出應該看起來如下:
GRANTEE PRIVILEGE -------------------------------------------------------------------------------------------------------------------------------- EXAMPLE-USER ALTER USER
執行下列查詢以識別透過角色授予權限的帳戶:
SELECT DISTINCT dba_users.username FROM dba_role_privs JOIN dba_users ON dba_role_privs.grantee = dba_users.username AND granted_role IN ( SELECT role FROM role_sys_privs WHERE privilege = 'ALTER USER' ) AND dba_users.oracle_maintained = 'N'
輸出應該看起來如下:
USERNAME ----------------------------------------------------------------------------------- EXAMPLE-MASTER-USERNAME RDSADMIN USER1 EXAMPLE-USER
**注意:**忽略輸出中的 RDSADMIN,因為這是 RDS 內部帳戶。
使用帳戶 EXAMPLE-USER 連線至資料庫:
-bash-4.2$ sqlplus EXAMPLE-USER@ora SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:35:55 2021 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Last Successful login time: Tue Sep 14 2021 13:33:23 +00:00 Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.12.0.0.0
執行下列查詢以解除鎖定的主要使用者帳戶:
SQL> ALTER USER EXAMPLE-MASTER-USERNAME ACCOUNT UNLOCK; User altered.
如果密碼已到期,請執行下列查詢來重設密碼:
SQL> ALTER USER EXAMPLE-MASTER-USERNAME IDENTIFIED BY EXAMPLE-MASTER-USER-NEW-PWD; User altered.
中斷與資料庫 EXAMPLE-USER 的連線,然後退出 SQL*Plus:
SQL> exit Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.12.0.0.0
您可以使用主要使用者帳戶成功登入。收到以下訊息:
bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@ora SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:36:36 2021 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Last Successful login time: Tue Sep 14 2021 13:35:12+00:00 Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.12.0.0.0 SQL> SHOW USER; USER is "EXAMPLE-MASTER-USERNAME"
**無法重設主要帳戶的密碼:**在特定情況下,您的主要帳戶可能會遭到封鎖,無法重設密碼:
範例 1:
如果您對主要帳戶使用相同的密碼超過 PASSWORD_REUSE_MAX 參數定義的次數,則您會在 Amazon RDS 主控台中看到下列事件:
Unable to reset your password. Error information: ORA-28007: the password cannot be reused ORA-06512: at line 1
若要查看 RDS 執行個體的最新事件,請參閱檢視 Amazon RDS 事件。
若要解決此問題,請使用 Amazon RDS 主控台將主要帳戶的密碼重設為新密碼。此外,如果您有另一個具有 ALTER USER 權限的資料庫帳戶,那麼您可以登入該帳戶並變更密碼。如果允許,請將主要帳戶描述檔的 PASWORD_REUSE_MAX 更新為 UNLIMITED,以便以任意次數重複使用密碼。
範例 2:
假設主要帳戶具有 PASSWORD_VERIFY_FUNCTION 參數設定,該設定可驗證嚴格的密碼政策,例如密碼的最小長度或使用最小字元數的要求。當您嘗試重設密碼且密碼不符合定義的規則時,可能會收到下列錯誤訊息:
ORA-28003: password verification for the specified password failed.
若要解決此問題,請確定您的 PASSOWRD_VERIFY_FUNCTION 中定義的規則符合新密碼。
防止主要使用者帳户被鎖定
如果您的組織安全政策允許,請避免為 RDS 主要使用者帳戶設定自訂描述檔,並保留 DEFAULT 描述檔。使用 DEFAULT 描述檔時,您的主要使用者帳戶會提供無限次失敗登入嘗試。此外,主要使用者帳戶的密碼永遠不會過期或因為非作用中而停用。然而,最佳實務是使用 Amazon RDS 主控台定期重設密碼。
您可以執行下列查詢來檢視 DEFAULT 描述檔的限制:
SELECT resource_name, limit FROM dba_profiles WHERE resource_type = 'PASSWORD' AND profile = 'DEFAULT' AND resource_name IN ( 'FAILED_LOGIN_ATTEMPTS', 'PASSWORD_LIFE_TIME', 'PASSWORD_VERIFY_FUNCTION', 'INACTIVE_ACCOUNT_TIME', 'PASSWORD_REUSE_TIME', 'PASSWORD_REUSE_MAX' );
輸出應該看起來如下:
RESOURCE_NAME LIMIT -------------------------------- -------------------------------------------------------------------------------------------------------------------------------- FAILED_LOGIN_ATTEMPTS UNLIMITED PASSWORD_LIFE_TIME UNLIMITED PASSWORD_REUSE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED PASSWORD_VERIFY_FUNCTION NULL INACTIVE_ACCOUNT_TIME UNLIMITED 6 rows selected.
如果您的主要帳戶有自訂描述檔,請將該帳戶切換為使用 DEFAULT 描述檔。
執行下列查詢以檢查您的主要帳戶目前的描述檔:
SELECT PROFILE FROM dba_users WHERE USERNAME = 'EXAMPLE-MASTER-USERNAME';
執行下列查詢以將主要帳戶的描述檔變更為 DEFAULT:
SQL> ALTER USER EXAMPLE-MASTER-USERNAME PROFILE default; User altered.
**注意:**如果您修改了 DEFAULT 描述檔密碼參數,請將 DEFAULT 描述檔重設回原廠設定,以取得可能會影響登入的參數。若要執行此操作,請使用以下命令:
SQL> ALTER PROFILE default LIMIT failed_login_attempts UNLIMITED password_life_time UNLIMITED inactive_account_time UNLIMITED; Profile altered.
如果您的組織政策要求使用限制設定來重設主要帳戶密碼,請務必遵循下列最佳實務:
- 由於 PASSWORD_LIFE_TIME 設定,在密碼過期之前,請使用 Amazon RDS 主控台定期重設密碼。
- 如果您的 PASSWORD_VERIFY_FUNCTION 具有嚴格的密碼驗證要求,請在設定新密碼時遵守這些要求。
- 根據 INACTIVE_ACCOUNT_TIME 設定使用您的主要使用者帳戶,以便帳戶保持啟用狀態。
追蹤失敗的登入嘗試
您可以使用 Oracle 中的稽核功能,追蹤您主要帳戶的無效登入嘗試。您可以將 RDS for Oracle 執行個體的 Oracle 初始化參數 audit_trail 修改為 db,以執行這項操作。您可以在資料庫執行個體的自訂參數群組中修改此參數。
如果 RDS for Oracle 執行個體使用預設參數群組,則無法變更參數值。您必須建立新的自訂參數群組、設定參數值,並將新建立的參數群組連接至您的執行個體。然後,重新啟動執行個體,以將新參數群組與執行個體建立關聯。如需詳細資訊,請參閱如何修改 Amazon RDS 資料庫參數群組的值?
修改自訂參數群組中的參數後,您必須重新啟動 RDS 執行個體。這是因為 audit_trail 是靜態參數,且需要重新啟動 RDS for Oracle 資料庫才能生效。如需詳細資訊,請參閱重新啟動資料庫執行個體。
RDS 執行個體的狀態變為可用之後,請使用主要帳戶或任何具有稽核權限的帳戶登入資料庫。如果您尚未設定稽核不成功的嘗試,請執行下列命令以開啟不成功的登入嘗試稽核:
AUDIT SESSION WHENEVER NOT SUCCESSFUL;
然後,執行下列查詢,以追蹤您的主要帳戶不成功的或失敗的登入嘗試。
**注意:**您可以從 WHERE 子句中移除 EXAMPLE-USER,以追蹤任何資料庫帳戶的此資料。
SELECT username, os_username, userhost, TO_CHAR(timestamp, 'MON-DD-YYYY HH24:MI:SS') what_time FROM dba_audit_trail WHERE returncode = 1017 AND username = 'EXAMPLE-USER';
Oracle CREATE PROFILE 文件
相關內容
- 已提問 4 個月前lg...
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前