如何防止 Amazon RDS for Oracle 資料庫執行個體的主要使用者帳戶遭到鎖定?

上次更新日期︰2021 年 11 月 16 日

我想要防止 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 = 'ADMIN'
    );

注意:請務必將查詢中的 ADMIN 取代為您的主要使用者名稱,

範例:

假設您使用 FORED_LOGIN_TES 設定建立描述檔,該設定僅允許輸入一個不正確的密碼。

SQL> CREATE PROFILE sec_profile LIMIT FAILED_LOGIN_ATTEMPTS 1;
Profile created.

您可以執行下列查詢,將此描述檔套用至主要使用者:

SQL> ALTER USER admin 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 admin/Secret123@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 admin/Secret123@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 admin/Oracle123@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 資料庫執行個體的主要使用者密碼以解除鎖定主要使用者?

使用不同的資料庫帳戶

如果您已經有另一個資料庫帳戶 (例如,useradmin) 具有 ALTER USER 權限,則您可以使用該帳戶來解除鎖定主要使用者帳戶。

執行下列查詢,以識別具有 ALTER 使用者權限的帳戶:

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
--------------------------------------------------------------------------------------------------------------------------------
USERADMIN                                                                  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
-----------------------------------------------------------------------------------
ADMIN
RDSADMIN
USER1
USERADMIN

注意:從輸出中忽略 RDSADMIN,因為它是 RDS 內部帳戶。

使用帳戶 useradmin 連線至資料庫:

-bash-4.2$ sqlplus useradmin/User123@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 admin ACCOUNT UNLOCK;
User altered.

如果密碼已到期,請執行下列查詢來重設密碼:

SQL> ALTER USER admin IDENTIFIED BY Oracle123;
User altered.

與資料庫 useradmin 中斷連線,然後退出 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 admin/Oracle123@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 "ADMIN"

無法重設主要帳戶的密碼:在特定情況下,您的主要帳戶可能會遭到封鎖,無法重設密碼:

範例 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 = 'ADMIN';

執行下列查詢以將主要帳戶的描述檔變更為 DEFAULT:

SQL> ALTER USER admin 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 執行個體的初始化參數 audit_trail 修改為 db,以執行這項操作。您可以在資料庫執行個體的自訂參數群組中修改此參數。

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

修改自訂參數群組中的參數後,您必須重新啟動 RDS 執行個體。這是因為 audit_trail 參數是靜態的,並且需要重新啟動 RDS for Oracle 資料庫才能生效。如需詳細資訊,請參閱重新啟動資料庫執行個體

RDS 執行個體的狀態變為可用之後,請使用主要帳戶或任何具有稽核權限的帳戶登入資料庫。如果您尚未設定稽核不成功的嘗試,請執行下列命令以開啟不成功的登入嘗試稽核

AUDIT SESSION WHENEVER NOT SUCCESSFUL;

然後,執行下列查詢,以追蹤您的主要帳戶不成功的或失敗的登入嘗試。

注意:您可以從 WHERE 子句中移除使用者名稱,以追蹤任何資料庫帳戶的此資料。

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

輸出看起來可能類似下列內容:

USERNAME                       OS_USERNAME                              USERHOST                                           WHAT_TIME
------------------------------ ---------------------------------------- -------------------------------------------------- ----------------------------------------
ADMIN                          oracle                                   ip-30-0-1-162.us-west-1.compute.internal           SEP-14-2021 15:48:08

Oracle CREATE PROFILE 文件

此文章是否有幫助?


您是否需要帳單或技術支援?