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 lockedsysユーザーでデータベースの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ステートメントによって設定ファイルに加えられた変更は、現在のセッションではなく、その後のセッションにおけるユーザーにのみ影響します。