TiDB ユーザーアカウント管理

このドキュメントでは、TiDB ユーザー アカウントを管理する方法について説明します。

ユーザー名とパスワード

TiDB は、ユーザー アカウントをmysql.userシステム テーブルのテーブルに保存します。各アカウントは、ユーザー名とクライアント ホストによって識別されます。各アカウントにはパスワードがある場合があります。

MySQL クライアントを使用して TiDBサーバーに接続し、指定されたアカウントとパスワードを使用してログインできます。各ユーザー名は、32 文字以下であることを確認してください。

mysql --port 4000 --user xxx --password

または、コマンドラインパラメータの省略形を使用します。

mysql -P 4000 -u xxx -p

ユーザーアカウントを追加する

TiDB アカウントは次の 2 つの方法で作成できます。

  • CREATE USERGRANTなど、アカウントを作成して権限を確立するための標準のアカウント管理 SQL ステートメントを使用します。
  • INSERTUPDATEDELETEなどのステートメントを使用して権限テーブルを直接操作し、 FLUSH PRIVILEGES実行します。この方法では更新が不完全になる可能性があるため、アカウントの作成または変更にはこの方法を使用しないことをお勧めします。

サードパーティのGUIツール使用してアカウントを作成することもできます。

CREATE USER [IF NOT EXISTS] user [IDENTIFIED BY 'auth_string'];

パスワードを割り当てると、TiDB はauth_stringをハッシュしてmysql.userテーブルに保存します。

CREATE USER 'test'@'127.0.0.1' IDENTIFIED BY 'xxx';

TiDB アカウントの名前は、ユーザー名とホスト名で構成されます。アカウント名の構文は、「user_name」@「host_name」です。

  • user_name大文字と小文字が区別されます。

  • host_nameはホスト名または IP アドレスであり、ワイルドカード%または_サポートします。たとえば、ホスト名'%'すべてのホストに一致し、ホスト名'192.168.1.%'サブネット内のすべてのホストに一致します。

ホストはファジーマッチングをサポートしています:

CREATE USER 'test'@'192.168.10.%';

testユーザーは、 192.168.10サブネット上の任意のホストからログインできます。

ホストが指定されていない場合、ユーザーはどの IP からでもログインできます。パスワードが指定されていない場合、デフォルトは空のパスワードです。

CREATE USER 'test';

以下と同等:

CREATE USER 'test'@'%' IDENTIFIED BY '';

指定されたユーザーが存在しない場合、ユーザーを自動的に作成する動作はsql_modeによって異なります。 sql_modeNO_AUTO_CREATE_USER含まれている場合、 GRANTステートメントはユーザーを作成せず、エラーが返されます。

たとえば、 sql_modeNO_AUTO_CREATE_USER含まれず、次のCREATE USERGRANTステートメントを使用して 4 つのアカウントを作成するとします。

CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'finley'@'localhost' WITH GRANT OPTION;
CREATE USER 'finley'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'finley'@'%' WITH GRANT OPTION;
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin_pass';
GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
CREATE USER 'dummy'@'localhost';

アカウントに付与された権限を確認するには、次のSHOW GRANTSステートメントを使用します。

SHOW GRANTS FOR 'admin'@'localhost';
+-----------------------------------------------------+ | Grants for admin@localhost | +-----------------------------------------------------+ | GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost' | +-----------------------------------------------------+

アカウントのアカウント定義を表示するには、次のSHOW CREATE USERステートメントを使用します。

SHOW CREATE USER 'admin'@'localhost';
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | CREATE USER for admin@localhost | +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | CREATE USER 'admin'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*14E65567ABDB5135D0CFD9A70B3032C179A49EE7' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT | +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)

ユーザーアカウントを削除する

ユーザー アカウントを削除するには、次のDROP USERステートメントを使用します。

DROP USER 'test'@'localhost';

この操作により、 mysql.userテーブル内のユーザーのレコードと権限テーブル内の関連レコードがクリアされます。

予約済みユーザーアカウント

TiDB は、データベースの初期化中に'root'@'%'デフォルト アカウントを作成します。

アカウントのリソース制限を設定する

TiDB は、リソース グループを使用してユーザーが消費するリソースを制限できます。詳細については、 リソース制御を使用してリソースの分離を実現する参照してください。

アカウントパスワードの割り当て

TiDB は、パスワードをmysql.userシステム テーブルに保存します。パスワードの割り当てまたは更新の操作は、 CREATE USER権限、またはmysqlデータベースの権限(新しいアカウントを作成するINSERT権限、既存のアカウントを更新するUPDATE権限) を持つユーザーのみに許可されます。

  • 新しいアカウントを作成するときにパスワードを割り当てるには、 CREATE USER使用し、 IDENTIFIED BY句を含めます。

    CREATE USER 'test'@'localhost' IDENTIFIED BY 'mypass';
  • 既存のアカウントのパスワードを割り当てたり変更したりするには、 SET PASSWORD FORまたはALTER USER使用します。

    SET PASSWORD FOR 'root'@'%' = 'xxx';

    または:

    ALTER USER 'test'@'localhost' IDENTIFIED BY 'mypass';

rootパスワードを忘れた

  1. 設定ファイルを変更します。

    1. tidb-server インスタンスの 1 つが配置されているマシンにログインします。

    2. TiDB ノードのデプロイメント ディレクトリの下のconfディレクトリに入り、 tidb.toml構成ファイルを見つけます。

    3. 構成ファイルのsecurityセクションに設定項目skip-grant-tableを追加します。 securityセクションがない場合は、 tidb.toml構成ファイルの末尾に次の 2 行を追加します。

      [security] skip-grant-table = true
  2. tidb-server プロセスを停止します。

    1. tidb-server プロセスをビュー。

      ps aux | grep tidb-server
    2. tidb-server に対応するプロセス ID (PID) を見つけて、 killコマンドを使用してプロセスを停止します。

      kill -9 <pid>
  3. 変更した構成を使用して TiDB を起動します。

    注記:

    TiDB プロセスを開始する前にskip-grant-table設定すると、オペレーティング システム ユーザーのチェックが開始されます。オペレーティング システムのrootユーザーのみが TiDB プロセスを開始できます。

    1. TiDB ノードのデプロイメント ディレクトリの下のscriptsディレクトリを入力します。

    2. オペレーティング システムのrootアカウントに切り替えます。

    3. ディレクトリ内のrun_tidb.shスクリプトをフォアグラウンドで実行します。

    4. 新しいターミナル ウィンドウでrootとしてログインし、パスワードを変更します。

      mysql -h 127.0.0.1 -P 4000 -u root
  4. run_tidb.shスクリプトの実行を停止し、手順 1 で TiDB 構成ファイルに追加されたコンテンツを削除し、tidb-server が自動的に起動するのを待ちます。

FLUSH PRIVILEGES

ユーザーや権限に関する情報は TiKVサーバーに保存され、TiDB はプロセス内にこの情報をキャッシュします。通常、 CREATE USERなどのステートメントによる関連情報のGRANTは、クラスター全体にすぐに反映されます。一時的にネットワークが利用できなくなるなどの要因によって操作が影響を受ける場合は、TiDB が定期的にキャッシュ情報を再読み込みするため、変更は約 15 分後に反映されます。

権限テーブルを直接変更した場合は、 FLUSH PRIVILEGESを実行して変更をすぐに適用します。

詳細は権限管理参照。

このページは役に立ちましたか?