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
を想定します。
新しいログインパスを作成して認証情報を定義する
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
ログインパスのエントリには、testuser
ユーザーアカウントを使用して dev.example.com
でホストされている MySQL データベースに自動的に接続するために必要なすべての情報が含まれます。
デフォルトの接続情報を設定する
MySQL ツールは、明示的な接続情報なしで呼び出された場合、妥当なデフォルトを使用するように設計されています。たとえば、Unix 系システムでは、上書きされない場合、次の詳細を使用して接続しようとします。
- ユーザー: オペレーティングシステムのユーザー名
- パスワード: パスワードなし
- ホスト:
localhost
。デフォルトでは、プラットフォームのデフォルトの場所にある Unix ソケット経由で接続することを意味します。
これらのオプションがユースケースに適していない場合は、mysql_config_editor
でデフォルトの接続情報を変更できます。これを行うには、ログインパスを指定せずに、デフォルトで使用する接続情報を提供します。
例:
mysql_config_editor set --user=root --password
これにより、MySQL ツールが他のログインパスが指定されていない場合に読み取る一般的な client
ログインパスの下に接続情報が保存されます。
ログインパスを使用したログイン
構成した接続情報を使用するには、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 データベースの接続情報を設定できます。