身元確認および認証機能は、データベースにログインしてデータにアクセスするユーザーの身元を検証し、そのユーザーが特定のデータベースユーザーと関連付けられるかどうかを確認し、関連付けられたデータベースユーザーの権限に基づいて、そのユーザーのデータベース内でのデータアクセス活動を制御します。OceanBaseは、MySQLモードとOracleモードの両方の認証機能をサポートしています。
MySQLモード
認証
MySQLでは、ユーザーはuser_nameとhostの組み合わせで構成されます。以下のステートメントを使用して、同じユーザー名を持つ3人のユーザーを作成する例を示します:
create user 'u1'@'%' identified by '***';
create user 'u1'@'1.1.1.1' identified by '***';
create user 'u1'@'2.2.2.2' identified by '***';
ユーザーがログインする際、OBServerノードはuser_name、client_ip、passwordの一致に基づいてユーザーログインを制御します。
パスワードの複雑さ
悪意のあるパスワード攻撃を防ぐため、OceanBaseデータベースのユーザーは必要に応じてパスワードの複雑さ関数を設定し、ユーザーログインの身元を検証することで、データベースのセキュリティを向上させることができます。
MySQLモードでは、ユーザーは一連のシステム変数を設定してパスワードの複雑さルールを規定できます。これらの設定はテナントレベルです。ユーザーの作成時やパスワードの変更時にシステム変数の設定に基づいてパスワードが検証され、検証に失敗するとエラーが表示されます。関連するシステム変数は以下の表のとおりです:
変数名 |
機能 |
使用説明 |
|---|---|---|
| validate_password_check_user_name | ユーザーのパスワードがユーザー名と同じであるかどうかをチェックします | onの場合、ユーザーのパスワードはユーザー名と同じにすることはできません。 |
| validate_password_length | ユーザーパスワードの最小長を設定 | - |
| validate_password_mixed_case_count | ユーザーパスワードに含める大文字と小文字の最小数を設定 | - |
| validate_password_number_count | ユーザーパスワードに含める数字の最小数を設定 | - |
| validate_password_policy | パスワードチェックポリシーを設定 |
|
| validate_password_special_char_count | ユーザーパスワードに含める特殊文字の最小数 | - |
ログイン失敗処理
OceanBaseデータベースは、複数回のログイン失敗を試みたユーザーをロックします。主な目的は悪意のあるパスワード攻撃を防ぎ、データベースを保護し、データベースのセキュリティを向上させることです。
MySQLモードでは、システム変数connection_control_failed_connections_thresholdを使用して、ユーザーの誤ログイン試行のしきい値を指定します。この変数はテナントレベルで、整数型であり、取り得る範囲は[0,2147483647]で、デフォルト値は0です。ユーザーがこのパラメータを0に設定した場合、この機能は無効になり、ユーザーの誤ログイン試行は処理されません。ユーザーの誤ログイン回数がこの変数で定義された値を超えると、アカウントがロックされます。ロック時間は以下の2つのパラメータによって設定されます。
connection_control_min_connection_delay:誤ログイン回数のしきい値を超えた後の最初の誤ログインでアカウントをロックする時間を指定します。その後の2回目の誤ログインのロック時間はmin ( connection_control_min_connection_delay+1000,1000* trunc ( connection_control_min_connection_delay/1000,0 ))となります。それ以降の毎回の誤ログインのロック時間は、前回の時間に1000ミリ秒(1秒)ずつ加算されます。connection_control_max_connection_delay:誤ログインロック時間の最大値を指定します。時間がこの最大値に達すると、それ以上増加しません。
Oracleモード
身分認証
Oracleモードでは、テナント内でのユーザー名は一意ですが、異なるテナントのユーザーが同名であることも可能です。そのため、ユーザー名@テナント名 の形式でシステム全体においてユニークにユーザーを特定します。
パスワードの複雑さ
悪意のあるパスワード攻撃を防ぐため、OceanBaseデータベースではユーザーが必要に応じてパスワードの複雑さ関数を設定し、ユーザーのログイン身元を検証することで、データベースのセキュリティを向上させることができます。
Oracleモードでは、ユーザーはProfileのPASSWORD_VERIFY_FUNCTIONプロパティを使用して、パスワードの複雑さが要件を満たしているかどうかを検証できます。ユーザーはまず、パスワードの複雑さを検証するPL Functionを作成する必要があり、以下のインターフェースを満たす必要があります:
FUNCTION verify_function (username IN VARCHAR2,
password IN VARCHAR2,
old_password IN VARCHAR2)
RETURN BOOLEAN;
ユーザー作成時やパスワード変更時に、この検証関数が呼び出され、関数の実行結果に基づいて新しいパスワードが複雑さ要件を満たしているかどうか判断されます。
ログイン失敗処理
OceanBaseデータベースは、複数回のログイン失敗を試みたユーザーをロックします。主な目的は悪意のあるパスワード攻撃を防ぎ、データベースを保護し、データベースのセキュリティを向上させることです。
Oracleモードでは、User Profileを利用してユーザーロック機能を実装しています。User Profileのパスワードには、連続ログイン失敗後にユーザーをロックするための2つのパラメータが提供されています:
failed_login_attempts:連続ログイン失敗回数。
password_lock_time:ロック時間。単位は日です。