本記事では、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)を使用してパスワードのハッシュ計算と認証方式を制御できます。現在、以下の2種類の認証プラグインをサポートしています:
- mysql_native_password:従来のパスワード認証プラグインで、SHA-1ハッシュアルゴリズムを使用します。
- caching_sha2_password:SHA-256に基づくパスワード認証プラグインで、より高いセキュリティレベルを備えています。このプラグインはV4.4.2 BP2バージョンからサポートされており、システム変数default_authentication_pluginを使用して、新規ユーザー作成時に使用するデフォルトのプラグインとして設定できます。このプラグインには以下の特徴があります:
- SHA-256ハッシュアルゴリズム:より強力なSHA-256アルゴリズムをSHA-1に代わって使用し、ハッシュ値の生成時にランダム値(Salt)を追加します。
- 二段階認証モード:高速認証(ハッシュキャッシュに基づく)と完全認証(ストレージ層のハッシュに基づき、複数ラウンドのSHA-256計算を使用する)をサポートします。
- セキュリティ転送:SSLとRSAを使用したユーザーパスワードの暗号化転送をサポートします。
- パスワードキャッシュ:サーバー側が認証済みユーザーのハッシュ値をキャッシュし、以降の認証パフォーマンスを向上させます。
- 迭代回数の調整:システム変数caching_sha2_password_digest_roundsを使用して、ストレージ層のハッシュに対するSHA-256の反復回数を制御できます(デフォルトは5000)。
コンポーネントとドライバーのバージョン要件
caching_sha2_password認証プラグインを使用する場合、データベースコンポーネントとクライアントドライバーは以下のバージョン要件を満たす必要があります:
コンポーネント/ドライバー |
バージョン要件 |
|---|---|
| OceanBaseデータベースプロキシ(ODP) | V4.4.0以降のバージョン |
| OBClient | V2.2.13以降のバージョン |
| OB-JDBC | V2.4.18以降のバージョン |
例
ユーザーを作成または変更する際、IDENTIFIED WITH auth_plugin構文を使用して認証プラグインを指定できます。default_authentication_plugin変数で指定されていない場合、デフォルトでmysql_native_passwordが使用されます。
-- caching_sha2_password認証プラグインの使用を指定する(V4.4.2 BP2からサポート)
CREATE USER 'u1'@'%' IDENTIFIED WITH caching_sha2_password BY '*******';
-- mysql_native_password認証プラグインの使用を指定する
CREATE USER 'u2'@'%' IDENTIFIED WITH mysql_native_password BY '*******';
-- ユーザーの認証プラグインを変更する
ALTER USER 'u1'@'%' IDENTIFIED WITH caching_sha2_password BY '*******';
-- ユーザーの認証プラグイン情報を確認する
SELECT user, plugin, authentication_string FROM mysql.user WHERE user LIKE 'user_%';