OceanBaseデータベースは、複数回のログイン失敗を行ったユーザーをロックします。主な目的は、悪意あるパスワード攻撃を防ぎ、データベースを保護し、データベースのセキュリティを向上させることです。
OceanBaseデータベースのOracleモードでは、User Profileを使用してユーザーロック機能を実現します。
適用対象
このドキュメントは、OceanBaseデータベースのOracleモードにのみ適用されます。現在、OceanBaseデータベースCommunity EditionはMySQLモードのみを提供しています。MySQLモードでのログイン失敗処理については、ログイン失敗処理を参照してください。
概念の紹介
Profileファイルは、データベースユーザーが使用できるリソースを制限するための手段です。OceanBaseデータベースのOracleモードでは、Profileファイルは主にユーザーのログイン検証ポリシーを制御するために使用されます。ユーザーのProfileファイルを使用することで、ユーザーのロック機能を実現できます。
Profileファイルは、パスワードに対して2つのパラメータを提供し、連続したログイン失敗後にユーザーをロックします:
- failed_login_attempts:連続したログイン失敗回数。
- password_lock_time:ロック時間、単位は日。
ユーザーがロックされた場合、そのロックおよびアンロックポリシーは以下のとおりです:
- ユーザーのロック:パスワードが不正確なためにログインに失敗するたびに、失敗回数がしきい値に達すると、ユーザーのロックがトリガーされます。
- ユーザーのアンロック:ログインユーザーがロックされている場合、再度ログインする際にシステムはロック時間をチェックします。ロック時間が満了していれば、システムはアンロックしてから再ログインを試みます。ロック時間が満了していない場合、システムはエラーを報告します。また、SQL文を使用してユーザーをアンロックすることも可能です。
実装方法
管理者は、Profileを作成し、それをユーザーに適用することで、ユーザーのパスワード失敗処理を実現できます。主に以下の2つのステップが含まれます:
Profileを作成します。
CREATE PROFILEステートメントを使用してProfileを作成し、ユーザーの連続ログイン失敗回数と対応するロック時間を指定できます。SQLステートメントは次のとおりです:
CREATE PROFILE "profile_name" LIMIT { FAILED_LOGIN_ATTEMPTS | PASSWORD_LOCK_TIME | PASSWORD_LIFE_TIME | PASSWORD_GRACE_TIME } { integer | UNLIMITED | DEFAULT };ステートメントの説明:
このステートメントを実行するには、
CREATE PROFILE権限が必要です。FAILED_LOGIN_ATTEMPTS:連続ログインユーザーアカウント失敗回数を指定します。このパラメータを指定しない場合、デフォルトで
DEFAULTProfileの制限が使用されます。デフォルトのDEFAULTProfileでは、このパラメータの値はUNLIMITEDであり、連続ログインユーザーアカウント失敗回数に制限はありません。PASSWORD_LOCK_TIME:連続ログイン失敗回数がしきい値に達した場合、ユーザーアカウントがロックされる日数を指定します。このパラメータを指定しない場合、デフォルトで
DEFAULTProfileの制限が使用されます。デフォルトのDEFAULTProfileでは、このパラメータの値はUNLIMITEDであり、ユーザーのロック日数に制限はありません。PASSWORD_LIFE_TIME:同一パスワードを認証に使用できる有効日数を指定します。このパラメータを指定しない場合、デフォルトで
DEFAULTProfileの制限が使用されます。デフォルトのDEFAULTProfileでは、このパラメータの値はUNLIMITEDであり、同一パスワードを認証に使用できる日数に制限はありません。PASSWORD_GRACE_TIME:認証の有効日数に達した後、システムは警告を発行します。このパラメータは、警告発行後もユーザーアカウントのログインを許可する猶予期間の日数を指定します。このパラメータを指定しない場合、デフォルトで
DEFAULTProfileの制限が使用されます。デフォルトのDEFAULTProfileでは、このパラメータの値はUNLIMITEDであり、ユーザーのログイン日数に制限はありません。integer | UNLIMITED | DEFAULT:パラメータ値の範囲を指定します。その中で:integerは整数を表します。UNLIMITEDは、このパラメータに制限が設定されていないことを表します。DEFAULTは、DEFAULTProfileの制限を使用することを表します。
CREATE PROFILEステートメントの詳細については、CREATE PROFILEを参照してください。Profileをユーザーに適用します。
Profileをユーザーに適用する主なシナリオは以下の2つです:
ユーザー作成時に、既に作成されたProfileファイルを直接指定します。
SQLステートメントは次のとおりです:
obclient> CREATE USER user_name IDENTIFIED BY password PROFILE {"profile_name" | default};ユーザー作成時にProfileを指定しなかった場合、デフォルトで
DEFAULTProfileが使用されます。DEFAULTProfileの構成は、システムビューDBA_PROFILESで確認できます。CREATE USERステートメントの詳細については、CREATE USERを参照してください。ユーザーが既に作成されている場合、ユーザーのProfileファイルを変更することで、既に作成されたProfileファイルをユーザーに適用できます。
SQLステートメントは次のとおりです:
obclient> ALTER USER user_name PROFILE {"profile_name" | default};ALTER USERステートメントの詳細については、ALTER USERを参照してください。
操作例
SYSユーザーを使用して、クラスタのOracleテナントにログインします。obclient -usys@oracle -h127.1 -P2881 - P*******Profileを作成し、連続エラーログインポリシーを設定します。
userprof1という名前のProfileを作成し、連続5回の誤ログインで1日間ロックされます。obclient> CREATE PROFILE "userprof1" LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1;完了後、以下のステートメントを実行して、設定が正常に完了したかどうかを確認します。
obclient> SELECT * FROM DBA_PROFILES; +-----------+--------------------------+---------------+-------------+ | PROFILE | RESOURCE_NAME | RESOURCE_TYPE | LIMIT | +-----------+--------------------------+---------------+-------------+ | DEFAULT | FAILED_LOGIN_ATTEMPTS | PASSWORD | UNLIMITED | | DEFAULT | PASSWORD_GRACE_TIME | PASSWORD | UNLIMITED | | DEFAULT | PASSWORD_LIFE_TIME | PASSWORD | UNLIMITED | | DEFAULT | PASSWORD_LOCK_TIME | PASSWORD | 86400000000 | | DEFAULT | PASSWORD_VERIFY_FUNCTION | PASSWORD | NULL | | userprof1 | FAILED_LOGIN_ATTEMPTS | PASSWORD | 5 | | userprof1 | PASSWORD_GRACE_TIME | PASSWORD | DEFAULT | | userprof1 | PASSWORD_LIFE_TIME | PASSWORD | DEFAULT | | userprof1 | PASSWORD_LOCK_TIME | PASSWORD | 86400000000 | | userprof1 | PASSWORD_VERIFY_FUNCTION | PASSWORD | DEFAULT | +-----------+--------------------------+---------------+-------------+ 10 rows in setユーザーを作成し、Profileを指定します。
obclient> CREATE USER secuser IDENTIFIED BY ****** PROFILE "userprof1"; obclient> GRANT all privileges ON *.* to secuser;設定結果を検証します。
連続5回誤ったパスワードを入力すると、ユーザーは1日間ロックされます。
$ obclient -h127.1 -P2881 -usecuser@oracle -p*******; obclient: [Warning] Using a password on the command line interface can be insecure. ERROR 5039 (01007): User lockedrootユーザーでデータベースのsysテナントにログインし、失敗したログイン情報を確認します。obclient> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; +-------------+-----------------+ | USERHOST | FAILED_ATTEMPTS | +-------------+-----------------+ | 'test'@'%' | 5 | +-------------+-----------------+ 1 row in set (0.005 sec)ユーザーのロックを解除します。
注意
ユーザーのロック解除操作は通常管理者が行います。一般ユーザーがロックおよびロック解除操作を実行するには、グローバルな
ALTER USER権限が必要です。ユーザー権限と権限付与に関する操作の詳細については、ユーザー権限の確認および直接権限付与を参照してください。obclient> ALTER USER secuser ACCOUNT UNLOCK;
ログイン失敗処理ポリシーの変更
既に作成されたProfileは、ALTER PROFILE ステートメントを使用して変更できます。
ALTER PROFILE ステートメントの詳細については、ALTER PROFILEを参照してください。
注意
ロックされたユーザーに対しては、ALTER PROFILE ステートメントを使用して FAILED_LOGIN_ATTEMPTS の値を変更することでロックを解除することはできません。ALTER PROFILE ステートメントを含む設定ファイルの変更は、現在のセッションにいるユーザーには影響せず、その後のセッションにいるユーザーにのみ影響します。