身元識別および認証機能は、データベースにログインしてデータにアクセスするユーザーの身元を検証し、そのユーザーが特定のデータベースユーザーと関連付けられるかどうかを確認するために使用されます。また、関連付けられたデータベースユーザーの権限に基づいて、データベース内でのユーザーのデータアクセス活動をセキュリティ制御します。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:ロック時間、単位は日。