重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

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ステートメントを使用する。
  • INSERTなどのUPDATEを使用して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 USER 、およびその他のステートメントによる関連情報の変更は、クラスタ全体で迅速に有効になりGRANT 。一時的に利用できないネットワークなどの要因により運用が影響を受ける場合、TiDBは定期的にキャッシュ情報をリロードするため、変更は約15分で有効になります。

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

FLUSH PRIVILEGES;

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