Global outage event
If you're experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
Amazon RDS for Oracle DB インスタンスのマスターユーザーアカウントがロックされないようにするにはどうすればよいですか?
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_trail を db に変更します。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
