TiDB ユーザーアカウント管理
This document describes how to manage a TiDB user account.
ユーザー名とパスワード
TiDBは、ユーザーアカウントをシステムテーブルmysql.userに格納します。各アカウントはユーザー名とクライアントホストによって識別されます。各アカウントにはパスワードが設定されている場合があります。
MySQLクライアントを使用してTiDBサーバーに接続し、指定されたアカウントとパスワードでログインできます。ユーザー名は32文字以内である必要があります。
mysql --port 4000 --user xxx --password
または、コマンドラインパラメータの省略形を使用します。
mysql -P 4000 -u xxx -p
ユーザーアカウントを追加する
You can create TiDB accounts in two ways:
- アカウントを作成して権限を確立するための標準のアカウント管理 SQL ステートメント (
CREATE USERやGRANTなど) を使用します。 INSERTなどのステートメントを使用して権限テーブルを直接操作し、DELETEFLUSH PRIVILEGES実行します。この方法でUPDATE更新が不完全になる可能性があるため、アカウントの作成または変更にはこの方法を使用しないことをお勧めします。
サードパーティの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_modeにNO_AUTO_CREATE_USER含まれる場合、 GRANTステートメントはユーザーを作成せず、エラーが返されます。
For example, assume that the sql_mode does not include NO_AUTO_CREATE_USER, and you use the following CREATE USER and GRANT statements to create four accounts:
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' |
+-----------------------------------------------------+
To see the account definition for an account, use the SHOW CREATE USER statement:
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';To assign or change a password for an existing account, use
SET PASSWORD FORorALTER USER:SET PASSWORD FOR 'root'@'%' = 'xxx';または:
ALTER USER 'test'@'localhost' IDENTIFIED BY 'mypass';
rootパスワードを忘れた
設定ファイルを変更します。
tidb-server インスタンスの 1 つが配置されているマシンにログインします。
TiDB ノードのデプロイメント ディレクトリの下の
confディレクトリに入り、tidb.toml構成ファイルを見つけます。設定ファイルの
securityセクションに設定項目skip-grant-table追加します。5securityがない場合は、tidb.toml設定ファイルの末尾に次の2行を追加します。[security] skip-grant-table = true
tidb-server プロセスを停止します。
tidb-server プロセスをビュー。
ps aux | grep tidb-servertidb-server に対応するプロセス ID (PID) を見つけて、
killコマンドを使用してプロセスを停止します。kill -9 <pid>
変更した構成を使用して TiDB を起動します。
注記:
TiDBプロセスを開始する前に
skip-grant-table設定すると、オペレーティングシステムのユーザーチェックが開始されます。オペレーティングシステムのrootユーザーのみがTiDBプロセスを開始できます。TiDB ノードのデプロイメント ディレクトリの下の
scriptsディレクトリを入力します。Switch to the
rootaccount of the operating system.ディレクトリ内の
run_tidb.shスクリプトをフォアグラウンドで実行します。新しいターミナル ウィンドウで
rootとしてログインし、パスワードを変更します。mysql -h 127.0.0.1 -P 4000 -u root
run_tidb.shスクリプトの実行を停止し、手順 1 で TiDB 構成ファイルに追加された内容を削除し、tidb-server が自動的に起動するのを待ちます。
FLUSH PRIVILEGES
ユーザーと権限に関する情報はTiKVサーバーに保存され、TiDBはこれらの情報をプロセス内にキャッシュします。通常、 CREATE USER 、その他GRANTステートメントによる関連情報の変更は、クラスター全体に迅速に反映されます。一時的なネットワーク利用不可などの要因によって操作が影響を受ける場合、TiDBは定期的にキャッシュ情報を再読み込みするため、変更は約15分後に反映されます。
権限テーブルを直接変更した場合は、 FLUSH PRIVILEGES実行して変更をすぐに適用します。
詳細は権限管理参照。