MySQL / ツールとユーティリティ
mysql_config_editor
を使用して MySQL 認証情報を管理する
はじめに
複数のホストにわたって異なるユーザーやデータベースの認証情報を維持することは、使いやすさの観点から困難な場合があります。複数のMySQLサーバーに定期的にログインする場合や、セキュリティ上の理由で固有の権限を持つ個別のユーザーアカウントを持つプロジェクトがある場合、必要なアカウントに接続する方法を見失うことが容易にあります。
幸いなことに、MySQL には mysql_config_editor
と呼ばれる小さなユーティリティが用意されており、MySQL の認証情報を保存および管理することで、MySQL クライアントやツールで簡単に認証できるように設計されています。このガイドでは、mysql_config_editor
の仕組み、複数の認証情報を安全に管理する方法、そして他の MySQL ツールにこの設定を利用してサーバーに認証させる方法について説明します。
mysql_config_editor
はどのように機能しますか?
mysql_config_editor
ユーティリティは、MySQL のインストールに含まれる小さなプログラムで、異なる MySQL サーバーや異なるアカウントへの接続に使用する認証情報を管理します。認証情報は暗号化され、ホームディレクトリの .mylogin.cnf
というファイルに保存されます。
MySQL アカウントへのログイン方法を記述する各認証情報のセットは「ログインパス」と呼ばれます。これらは通常、アカウントのユーザー名とパスワードを指定し、さらに MySQL がリッスンしているホスト名やポートなど、適切な MySQL サーバーに接続するための関連情報を保存できます。
MySQL クライアントとツールは、.mylogin.cnf
ファイル内の情報を使用して MySQL サーバーへのログインを支援するように自動的に設定されます。mysql
クライアントなどの MySQL ツールで --login-path=
パラメータを使用して、どのログイン詳細を使用するかを指定できます。ログインパスが指定されていない場合、ツールは、定義されていれば client
として知られるデフォルトのログインパスに関連付けられた認証情報を使用します。
ログインパスが特定の値を定義していない場合、MySQL クライアントとツールは代わりに設定されたデフォルト値を使用します。たとえば、mysql_config_editor
でログインパスを作成する際にホストを指定しない場合、mysql
クライアントは自動的に localhost
を仮定します。これは、コマンドラインで手動で認証情報を提供するときに --host=
オプションを省略した場合と同じです。
新しいログインパスを作成して認証情報を定義する
まず、mysql_config_editor
ツールを使用して新しいログインパスを設定することから始めましょう。
新しいログインパスを定義するための一般的な構文は次のとおりです。
mysql_config_editor set [options]
通常、次のオプションのいくつかを含めます。
--login-path=
: これらの認証情報に使用したいラベル--user=
: アカウントのユーザー名--password
:mysql_config_editor
にアカウントのパスワードを要求するよう指示するフラグ。パスワードプロンプトを使用すると、コマンドラインで直接提供された場合のようにシェル履歴ファイルに記録されないように、パスワードを安全に入力できます。--host=
: MySQL サーバーがホストされているホスト名または IP アドレス。--port=
: MySQL サーバーがリッスンしているポート番号。--socket=
: Unix ソケットを介してローカルサーバーに接続する場合のローカルソケットファイルへのパス。
MySQL ユーティリティのデフォルトオプションと異なる情報のみを提供する必要があります。
エントリを作成する際、mysql_config_editor
は一度作成されたログインパスに関連付けられた詳細を編集する方法を提供しないことに留意してください。詳細を変更するには、以前のエントリを上書きするために、すべての適切な接続情報を再度指定する必要があります。
ローカルアカウントの接続情報を設定する
たとえば、ローカル MySQL サーバーで salesadmin
というユーザーのログインを作成するには、次のように入力します。
mysql_config_editor set --login-path=sales --user=salesadmin --password
アカウントのパスワードを求められ、新しい接続情報は sales
というラベルの下に .mylogin.cnf
ファイルに保存されます。--user=salesadmin
でアカウント名を提供し、--password
フラグを含めることで mysql_config_editor
にパスワードを要求するよう指示します。
これはローカルアカウントであるため、Unix 系システムで実行されている場合はローカルソケットファイルを介して接続します。ただし、MySQL を異なる方法で実行するように変更していない場合、MySQL ツールは何をすべきかを知っており、設定時にこれらの詳細を提供する必要はありません。
リモートアカウントの接続情報を設定する
dev.example.com
というホストのポート 5555 でリッスンしている MySQL サーバー上のリモートユーザー名 testuser
の接続情報を保存するには、次のように入力します。
mysql_config_editor set --login-path=testing --user=testuser --password --host=dev.example.com --port=5555
testing
ログインパスのエントリには、dev.example.com
でホストされている MySQL データベースにユーザーアカウント testuser
で自動的に接続するために必要なすべての情報が含まれます。
デフォルトの接続情報を設定する
MySQL ツールは、明示的な接続情報なしで呼び出された場合に妥当なデフォルトを使用するように設計されています。たとえば、Unix 系システムでは、上書きされていない場合、以下の詳細を使用して接続を試みます。
- ユーザー: オペレーティングシステムのユーザー名
- パスワード: なし
- ホスト:
localhost
。これはデフォルトで、プラットフォームのデフォルトの場所にある Unix ソケットを介して接続することを意味します。
これらのオプションがユースケースに適していない場合、mysql_config_editor
を使用してデフォルトの接続情報を変更できます。そのためには、ログインパスを指定せずに、デフォルトで使用したい接続情報を提供します。
例:
mysql_config_editor set --user=root --password
これにより、接続情報は一般的な client
ログインパスの下に保存され、他のログインパスが提供されていない場合に MySQL ツールによって読み取られます。
ログインパスでのログイン
設定した接続情報を使用するには、MySQL クライアントとツールのコマンドラインで --login-path=
を指定します。
たとえば、以前に設定したローカルの salesadmin
アカウントにログインするには、mysql
に sales
ログインパスを使用するように指示できます。
mysql --login-path=sales
testuser
アカウントを使用して dev.example.com
サーバーにログインするには、代わりに testing
ログインパスを指定できます。
mysql --login-path=testing
--login-path=
なしで mysql
を呼び出すと、設定した client
ログインパスをチェックし、root
アカウントでローカルデータベースにログインしようとします。
mysql
いずれの場合も、追加の詳細を提供することなく、適切なアカウントにログインできます。
接続しているユーザーは、次のように入力して確認できます。
SELECT user();
+----------------------+| user() |+----------------------+| salesadmin@localhost |+----------------------+1 row in set (0.00 sec)
接続しているユーザーと方法を確認したい場合は、代わりに status
コマンドを使用できます。
status
--------------mysql Ver 8.0.27-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))Connection id: 28Current database:Current user: sammy@localhostSSL: Not in useCurrent pager: stdoutUsing outfile: ''Using delimiter: ;Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)Protocol version: 10Connection: Localhost via UNIX socketServer characterset: utf8mb4Db characterset: utf8mb4Client characterset: utf8mb4Conn. characterset: utf8mb4UNIX socket: /var/run/mysqld/mysqld.sockBinary data as: HexadecimalUptime: 1 day 21 hours 37 min 49 secThreads: 2 Questions: 66 Slow queries: 0 Opens: 186 Flush tables: 3 Open tables: 105 Queries per second avg: 0.000--------------
Current user
の下に現在のユーザーが表示されますが、Connection
と UNIX socket
の項目を確認することで、サーバーにどのように接続されているかの詳細も表示できます。
利用可能なログインパスの表示
定義した接続の詳細はホームディレクトリの .mylogin.cnf
というファイルに保存されますが、セキュリティのため内容は暗号化されています。設定情報を表示するには、再度 mysql_config_editor
を使用する必要があります。
設定したデフォルトのログイン情報(client
ログインパスの下に保存されています)を表示するには、追加オプションなしで print
サブコマンドを使用できます。
mysql_config_editor print
[client]user = "root"password = *****
MySQL は、適切なログインパスラベルの下に接続詳細をグループ化するために INI スタイルのファイル形式を使用します。パスワードが伏せられていることにも気づくかもしれません。これも、保存されたパスワードが漏洩しないようにするためのセキュリティ対策です。
別のログインパスを表示するには、通常通り --login-path=
オプションを指定します。
mysql_config_editor print --login-path=testing
[testing]user = "testuser"password = *****host = "dev.example.com"port = 5555
設定されているすべてのログインパスを表示するには、代わりに --all
フラグを追加します。
mysql_config_editor print --all
[sales]user = "salesadmin"password = *****[testing]user = "testuser"password = *****host = "dev.example.com"port = 5555[client]user = "root"password = *****
接続情報の削除
remove
サブコマンドを使用して、ログインパスに関連付けられた接続情報を削除できます。--login-path
を指定することで、mysql_config_editor
が適切なエントリを対象とすることができます。
たとえば、sales
ログインパスの接続情報を削除するには、次のように入力します。
mysql_config_editor remove --login-path=sales
設定されたエントリを確認すると、sales
ログインパスが削除されていることがわかります。
mysql_config_editor print --all
[testing]user = "testuser"password = *****host = "dev.example.com"port = 5555[client]user = "root"password = *****
ログインパスの接続情報から特定のパラメータを削除することもできます。たとえば、「dev.example.com」にある MySQL サーバーがデフォルトの 3306 ポートで実行するように再設定された場合、ポート情報を削除できます。そのためには、--login-path=
とともに --port
フラグを提供します。
mysql_config_editor remove --login-path=testing --port
エントリを再度表示することで、ポート指定が testing
ログインパスから削除されたことを確認できます。
mysql_config_editor print --all
[testing]user = "testuser"password = *****host = "dev.example.com"[client]user = "root"password = *****
また、すべてのログインパスを削除し、新しい空の .mylogin.cnf
ファイルを作成するには、次のように入力します。
mysql_config_editor reset
これにより、設定されているすべてのログインパスが削除されます。
まとめ
このガイドでは、接続情報を管理することでユーザーエクスペリエンスを向上させるために設計された MySQL の小さなユーティリティの1つである mysql_config_editor
について説明しました。ログインパスを使用して接続情報を設定する方法と、設定済みの認証情報を使用して MySQL ツールを呼び出す方法を扱いました。また、デフォルトを上書きする方法や、既存のログインパス情報を管理する方法についても議論しました。
mysql_config_editor
や MySQL プロジェクトが提供するその他のツールを活用することで、単一の場所から複数のプロジェクトを管理する際に生じる不満の一部を解消できます。これは、反復的でエラーが発生しやすいタスクを効率化し、より重要な作業に集中できるように設計された、比較的シンプルなツールの良い例です。
Prisma を使用している場合、MySQL データベースコネクタの設定時に MySQL データベースの接続情報を設定できます。