Amazon RDS for Oracle DB インスタンスのマスターユーザーアカウントがロックされないようにするにはどうすればよいですか?

所要時間4分
0

Amazon Relational Database Services (Amazon RDS) for Oracle DB インスタンスのマスターユーザーアカウントがロックされないようにしたいと考えています。

解決方法

Amazon RDS のマスターユーザーアカウントは、DB インスタンスを運用するための管理タスクをモニタリング、管理、および実行するために不可欠です。このアカウントはお客様の最初のデータベースアカウントであり、データベースの保守と運用に必要な管理ロールおよび権限が含まれています。各データベースエンジンについてマスターユーザーが取得する権限とロールの詳細なリストについては、マスターユーザーアカウント特権を参照してください。マスターユーザーアカウントがロックされてログインできなくなると、管理機能が中断し、重要な業務に影響が及ぶ可能性があります。Amazon RDS コンソールまたは別のデータベースアカウントを使用して、マスターアカウントへのアクセスを回復できます。

根本原因を特定する

マスターユーザーアカウントがロックされる一般的な理由の 1 つは、マスターアカウントにカスタムプロファイル設定を適用することです。これらの設定の一例を次に示します。

  • FAILED_LOGIN_ATTEMPTS: マスターアカウントへのログイン試行の連続失敗回数が、このパラメータに設定された値を超えると、アカウントはロックされます。
  • PASSWORD_LIFE_TIME: 特定のパスワードの使用期間がこのパラメータに設定された値を超えると、そのパスワードを使用してアカウントにログインできなくなり、アカウントは有効期限切れとしてマークされます。再度ログインするには、パスワードをリセットする必要があります。PASSWORD_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'
    );

例:

間違ったパスワードの入力を 1 回だけ許容する FAILED_LOGIN_ATTEMPTS 設定を持つプロファイルを作成するとします。

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.

マスターアカウントが PASSWORD_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) を使用する

パスワードをリセットすると、アカウントのロックを解除し、有効期限が切れたアカウントを再開できます。詳細については、How do I reset the master user password for my Amazon RDS DB instance to unlock master user? を参照してください。

別のデータベースアカウントを使用する

ALTER USER 権限を持つ別のデータベースアカウント (EXAMPLE-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 権限を持つ別のデータベースアカウントがある場合は、そのアカウントにログインしてパスワードを変更できます。許可されている場合は、マスターアカウントのプロファイルの PASSWORD_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_traildb に変更します。DB インスタンスのカスタムパラメータグループでこのパラメータを変更できます。

RDS for Oracle インスタンスがデフォルトのパラメータグループを使用している場合、パラメータ値を変更することはできません。新しいカスタムパラメータグループを作成して、パラメータ値を設定し、新しく作成したパラメータグループをインスタンスにアタッチする必要があります。その後、インスタンスを再起動して、新しいパラメータグループをインスタンスに関連付けます。詳細については、Amazon RDS DB パラメータグループの値の変更方法を教えてくださいを参照してください。

カスタムパラメータグループのパラメータを変更した後は、RDS インスタンスを再起動する必要があります。これは、audit_trail パラメータが静的であり、有効になるには RDS for Oracle データベースを再起動する必要があるためです。詳細については、「DB インスタンスを再起動する」を参照してください。

RDS インスタンスのステータスが [available] (利用可能) になったら、マスターアカウントまたは audit 権限を持つ任意のアカウントを使用してデータベースにログインします。失敗した試行の監査が未設定の場合は、次のコマンドを実行して、[auditing for unsuccessful login attempts] (失敗したログイン試行に対する監査) をオンにします。

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


AWS公式
AWS公式更新しました 2年前
コメントはありません