本記事では、OceanBaseデータベースのMySQLモードにおけるユーザーの識別と認証の仕組みについて説明します。ユーザー認証、ユーザー識別情報の構成、認証プラグインの使用方法が含まれます。
ユーザーの識別と認証の機能は、データベースにログインするユーザーの身元を確認し、そのユーザーがデータベースのユーザーと関連付けられるかどうかを検証し、関連付けられたユーザーの権限に基づいてデータアクセス活動をセキュリティ制御するために使用されます。認証プラグイン(Authentication Plugin)は、ユーザーパスワードの認証処理に使用されます。
ユーザー認証
OceanBaseデータベースのユーザー認証とは、クライアントがOceanBaseサーバーへのアクセスを試みる際に有効なユーザー資格情報を提供することを指します。OceanBaseサーバーが提供された資格情報が有効であることを確認すると、クライアントがOceanBaseデータベースにアクセスすることを許可します。OceanBaseデータベースは、MySQL Authentication Protocol(MAPI)と呼ばれるプロトコルを使用してユーザー認証を行います。これは、クライアントマシン上のMySQLクライアントアカウントに基づいて認証を完了するものであり、正しいユーザー名とパスワードを持つクライアントのみがOceanBaseサーバーに接続できます。クライアントが接続要求を送信すると、OceanBaseサーバーはランダムな識別コードをクライアントに送信します。クライアントは正しいユーザー名とパスワードを使用してこの識別コードをデコードし、その結果をサーバーに送り返す必要があります。結果が正しければ、OceanBaseサーバーはクライアントのサーバー接続を許可します。
ユーザー識別情報
MySQLモードでは、userはuser_nameとhostの組み合わせで構成されます。次のステートメントを使用して、同じユーザー名を持つ3人のユーザーを作成します。
例:
create user 'u1'@'%' identified by '*******';
create user 'u1'@'10.xxx.xxx.1' identified by '*******';
create user 'u1'@'10.xxx.xxx.2' identified by '*******';
説明:
%:任意のクライアントIPがそのテナントに接続することを許可します。10.xxx.xxx.1:10.xxx.xxx.1というIPアドレスのみがそのテナントに接続することを許可します。10.xxx.xxx.2:10.xxx.xxx.2というIPアドレスのみがそのテナントに接続することを許可します。
ユーザーがログインする際、OBServerノードはuser_name、client_ip、passwordの一致に基づいてユーザーのログインを制御します。
認証プラグイン
OceanBaseデータベースのMySQLモードでは、認証プラグイン(Authentication Plugin)を使用してパスワードのハッシュ計算と認証方式を制御できます。現在、以下の認証プラグインをサポートしています:
mysql_native_password:従来のパスワード認証プラグインで、SHA-1ハッシュアルゴリズムを使用します。
caching_sha2_password:SHA-256に基づくパスワード認証プラグインで、より高いセキュリティレベルを備えています。このプラグインはV4.4.2 BP2バージョンからサポートされており、システム変数default_authentication_pluginを使用して、新規ユーザー作成時に使用するデフォルトのプラグインとして設定できます。このプラグインには以下の特徴があります:
- SHA-256ハッシュアルゴリズム:より強力なSHA-256アルゴリズムをSHA-1に代わって使用し、ハッシュ値の生成時にランダム値(Salt)を追加します。
- 2種類の認証モード:高速認証(ハッシュキャッシュに基づく)と完全認証(ストレージ層のハッシュに基づき、複数ラウンドのSHA-256計算を使用する)をサポートします。
- 安全な通信:SSLとRSAを使用したユーザーパスワードの暗号化転送をサポートします。
- パスワードキャッシュ:サーバー側が認証済みユーザーのハッシュ値をキャッシュし、以降の認証パフォーマンスを向上させます。
- 反復回数の調整:システム変数caching_sha2_password_digest_roundsを使用して、ストレージ層のハッシュに対するSHA-256の反復回数を制御できます(デフォルトは5000)。
ob_sm3_password:このプラグインは、認証プロトコルとステートマシンを
caching_sha2_passwordと完全に共有します(AuthSwitch、高速認証/完全認証、TLS/RSAによるパスワードの暗号化送信)。ただしアルゴリズムとメタデータは独立しています。このプラグインには以下の特徴があります:- SM3ハッシュアルゴリズム(GB/T 32905-2016):SHA-256に代わり、パスワードの保存と認証検証に使用されます。
- 2種類の認証モード:高速認証(メモリキャッシュ) + 完全認証(ディスクに保存された文字列 + SSL/RSAによるパスワードの暗号化送信)。
- 反復回数の調整:システム変数ob_sm3_password_digest_roundsを使用して、
ob_sm3_password認証プラグインがパスワード認証文字列を生成する際に実行するSM3反復回数を制御できます(デフォルトは5000)。
説明
V4.4.2バージョンでは、V4.4.2 BP3バージョンから認証プラグイン
ob_sm3_passwordがサポートされます。
コンポーネントとドライバーのバージョン要件
caching_sha2_password、ob_sm3_password認証プラグインを使用する場合、データベースコンポーネントとクライアントドライバーは以下のバージョン要件を満たす必要があります:
コンポーネント/ドライバー |
caching_sha2_password |
ob_sm3_password |
|---|---|---|
| OceanBaseデータベースプロキシ(ODP) | V4.4.0以降のバージョン | V4.4.2.0以降のバージョン |
| OBClient | V2.2.13以降のバージョン | V2.2.14以降のバージョン |
| libobclient | V2.2.13以降のバージョン | V2.2.14以降のバージョン |
| OB-JDBC | V2.4.18以降のバージョン | V2.4.20以降のバージョン |
例
ユーザーを作成または変更する際、IDENTIFIED WITH auth_plugin構文を使用して認証プラグインを指定できます。default_authentication_plugin変数で指定されていない場合、デフォルトでmysql_native_passwordが使用されます。
ユーザー
user1を作成し、caching_sha2_password認証プラグインの使用を指定します(V4.4.2 BP2からサポート)。obclient> CREATE USER user1 IDENTIFIED WITH caching_sha2_password BY '*******';ユーザー
user2を作成し、mysql_native_password認証プラグインの使用を指定します。obclient> CREATE USER user2 IDENTIFIED WITH mysql_native_password BY '*******';ユーザー
user2の認証プラグインを変更します。obclient> ALTER USER 'u1'@'%' IDENTIFIED WITH caching_sha2_password BY '*******';ユーザー
sm3_userを作成し、ob_sm3_passwordの使用を明示的に指定します。obclient> CREATE USER sm3_user IDENTIFIED WITH ob_sm3_password BY '******';ユーザーの認証プラグイン情報を確認します。
obclient> SELECT user, plugin, authentication_string FROM mysql.user WHERE user LIKE 'user_%';
関連ドキュメント
IDENTIFIED WITH構文の詳細については、CREATE USERを参照してください。