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

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

ユーザー名とパスワード

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

MySQL クライアントを使用して TiDBサーバーに接続し、指定したアカウントとパスワードを使用してログインできます。

shell> mysql --port 4000 --user xxx --password

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

shell> mysql -P 4000 -u xxx -p

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

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

  • CREATE USERGRANTなど、アカウントの作成と権限の確立を目的とした標準のアカウント管理 SQL ステートメントを使用する。
  • INSERTUPDATE 、またはDELETEなどのステートメントを使用して特権テーブルを直接操作する。

特権テーブルを直接操作すると更新が不完全になる可能性があるため、アカウント管理ステートメントを使用することをお勧めします。サードパーティの 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 USERおよびGRANTステートメントを使用して 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' | +-----------------------------------------------------+

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

ユーザー アカウントを削除するには、次の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. securityの部分にskip-grant-tableを追加して、構成ファイルを変更します。

    [security] skip-grant-table = true
  2. 変更した構成で TiDB を起動します。 rootを使用してログインし、パスワードを変更します。

    mysql -h 127.0.0.1 -P 4000 -u root

skip-grant-tableが設定されている場合、TiDB プロセスを開始すると、ユーザーがオペレーティング システムの管理者であるかどうかがチェックされ、オペレーティング システムのrootユーザーのみが TiDB プロセスを開始できます。

FLUSH PRIVILEGES

ユーザーと権限に関連する情報は TiKVサーバーに保存され、TiDB はこの情報をプロセス内にキャッシュします。一般に、 CREATE USERGRANT 、およびその他のステートメントによる関連情報の変更は、クラスター全体ですぐに反映されます。ネットワークが一時的に利用できないなどの影響があった場合は、TiDB が定期的にキャッシュ情報をリロードするため、約 15 分で変更が反映されます。

特権テーブルを直接変更した場合は、次のコマンドを実行して変更をすぐに適用します。

FLUSH PRIVILEGES;

詳細については、 権限管理を参照してください。