跳至內容

我可以使用哪些最佳實務,避免 Amazon RDS for Oracle 執行個體的主要使用者帳戶鎖定?

4 分的閱讀內容
0

我的 Amazon Relational Database Service (Amazon RDS) for Oracle 執行個體主要使用者帳戶已鎖定。我想知道帳戶鎖定的原因,以及我可以採取哪些措施,避免帳戶再次鎖定。

解決方法

判斷根本原因

主要使用者帳戶遭到鎖定,通常是因為您設定了以下自訂參數:

  • **FAILED_LOGIN_ATTEMPTS:**當連續登入失敗次數高於此參數所設定的值時,帳戶會遭到鎖定。
  • **PASSWORD_LIFE_TIME:**密碼使用期限已超過此參數設定的值,因此您無法使用該密碼登入。接著,系統會將帳戶標記為過期。
    **注意:**如果您設定 PASSWORD_GRACE_TIME 值,但未在寬限期內變更密碼,則密碼會過期,後續連線也會遭到拒絕。
  • **INACTIVE_ACCOUNT_TIME:**如果您在此參數設定的連續天數內,未使用主要帳戶登入資料庫,則系統會鎖定主要帳戶。
    **注意:**此參數的最低值為 15 天。此參數沒有最高值。

如需更多資訊,請參閱 Oracle 網站上的建立設定檔

若要判斷帳戶遭到鎖定的原因,請執行以下命令,以檢查主要帳戶目前的設定檔設定:

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'
    );

範例情境

FAILED_LOGIN_ATTEMPTS 參數

您建立包含 FAILED_LOGIN_ATTEMPTS 參數的設定檔,且此參數只允許輸入一次錯誤密碼。接著,您使用錯誤密碼登入帳戶,並收到以下錯誤:

「ERROR:
ORA-01017: invalid username/password; logon denied.」

您再次嘗試登入。但是,由於 FAILED_LOGIN_ATTEMPTS 參數設定為 1,因此您會收到以下錯誤:

「ERROR:
ORA-28000: The account is locked.」

PASSWORD_LIFE_TIME 參數

您在主要帳戶設定檔中使用 PASSWORD_LIFE_TIME 參數,以限制密碼可使用的時間長度。之後,您超過此參數設定的值,並收到以下錯誤:

「ERROR:
ORA-28001: the password has expired.」

解除帳戶鎖定

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱 AWS CLI 錯誤疑難排解。此外,請確認您使用最新的 AWS CLI 版本

若要解除帳戶鎖定,請使用 Aurora 和 RDS 主控台、AWS CLI 或其他資料庫帳戶。

Aurora 和 RDS 主控台或 AWS CLI

首先,重設資料庫執行個體的管理員使用者密碼。接著,您即可解除帳戶鎖定並重新開啟帳戶。

其他資料庫帳戶

如果您有另一個具備 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

若要找出透過角色授予 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

**注意:**因為此範例是 RDS 內部帳戶,所以輸出中會顯示 RDSADMIN。您的輸出中不會顯示該帳戶。

若要解除帳戶鎖定,請完成以下步驟:

  1. 執行以下命令,使用具備 ALTER USER 權限的帳戶連線至資料庫:

    -bash-4.2$ sqlplus EXAMPLE-USER@oraSQL*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

    **注意:**將 EXAMPLE-USER 替換為具備 ALTER USER 權限的帳戶。

  2. 執行以下命令,以解除主要使用者帳戶鎖定:

    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.
  3. 若要中斷與資料庫的連線並結束 SQL*Plus,請執行以下命令:

    SQL> exitDisconnected from Oracle Database 19c
    Enterprise Edition Release 19.0.0.0.0 - ProductionVersion 19.12.0.0.0

    使用主要使用者帳戶登入後,您會收到以下訊息:

    bash-4.2$ sqlplus EXAMPLE-MASTER-USERNAME@oraSQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 14 13:36:36 2021Version 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:00Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.12.0.0.0SQL> SHOW USER;USER is "EXAMPLE-MASTER-USERNAME"

您無法重設主要帳戶的密碼

您可能已設定 PASSWORD_REUSE_MAXPASSWORD_VERIFY_FUNCTION 參數,因此主要帳戶無法重設密碼。

PASSWORD_REUSE_MAX

如果您使用相同密碼的次數超過為 PASSWORD_REUSE_MAX 參數設定的值,則會收到以下錯誤:

「Unable to reset your password.Error information: ORA-28007: the password cannot be reused ORA-06512: at line 1.」

如需更多 RDS 執行個體最新事件的資訊,請參閱檢視 Amazon RDS 事件

若要解決此問題,請在 Aurora 和 RDS 主控台中,將主要帳戶的密碼重設為您從未使用過的密碼。如果您有另一個具備 ALTER USER 權限的資料庫帳戶,也可以從該帳戶變更密碼。若要不受限制地重複使用密碼,請將主要帳戶設定檔的 PASSWORD_REUSE_MAX 參數更新為 UNLIMITED

PASSWORD_VERIFY_FUNCTION

PASSWORD_VERIFY_FUNCTION 參數會驗證嚴格的密碼政策,例如密碼長度下限,或必須使用最少字元數的要求。如果您嘗試重設密碼,但密碼不符合已定義的規則,則會收到以下錯誤:

「ORA-28003: password verification for the specified password failed.」

若要解決此問題,請確認新密碼符合您在 PASSOWRD_VERIFY_FUNCTION 參數中定義的規則。

使用 DEFAULT 設定檔,避免主要使用者帳戶遭到鎖定

如果組織的安全政策允許,請使用 DEFAULT 設定檔,而不要使用自訂設定檔。DEFAULT 設定檔可讓主要使用者帳戶擁有無限制的登入失敗嘗試次數。此外,主要使用者帳戶的密碼永遠不會到期,也不會因為閒置而停用。不過,最佳實務是定期在 Aurora 和 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.

如果組織政策要求您使用限制性設定重設主要帳戶密碼,請採用以下最佳實務:

  • 使用 Aurora 和 RDS 主控台,在密碼到期前定期重設密碼。
  • 如果您有設定嚴格密碼驗證要求的 PASSWORD_VERIFY_FUNCTION 參數,請在設定新密碼時遵循這些要求。
  • 根據 INACTIVE_ACCOUNT_TIME 參數使用主要使用者帳戶,讓帳戶維持啟用狀態。
  • 對於資料庫執行個體和 Multi-AZ 資料庫叢集,請使用 Secrets Manager 管理主要使用者密碼

追蹤登入失敗嘗試

若要追蹤無效的登入嘗試,請在資料庫執行個體的自訂參數群組中,將 Oracle 初始化 AUDIT_TRAIL 參數修改為 db。如需更多資訊,請參閱 Oracle 網站上的 AUDIT_TRAIL

如果您的資料庫執行個體使用預設參數群組,則您無法變更參數值。您必須建立新的自訂參數群組、設定參數值,並將新的參數群組連接至執行個體。接著,重新啟動執行個體,以將新的參數群組與執行個體建立關聯。如需更多資訊,請參閱如何修改 Amazon RDS 資料庫參數群組的值?

在自訂參數群組中修改參數後,您必須重新啟動資料庫執行個體,RDS for Oracle 資料庫才會套用變更。

當 RDS 執行個體狀態變成可用後,請使用主要帳戶或任何具備 AUDIT_TRAIL 權限的帳戶登入資料庫。如果您尚未開啟登入失敗嘗試稽核,請執行以下命令以開啟:

AUDIT SESSION WHENEVER NOT SUCCESSFUL;

接著,執行以下命令,追蹤主要帳戶的登入失敗嘗試:

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';

**注意:**若要追蹤所有資料庫帳戶的登入失敗嘗試資料,請從前述命令的 WHERE 子句中移除 EXAMPLE-USER