シェア

はじめに

さまざまなホストにまたがるさまざまなユーザーとデータベースの認証情報を管理することは、ユーザビリティの観点から課題となる可能性があります。複数の 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 アカウントにログインするには、mysqlsales ログインパスを使用するように指示します。

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: 28
Current database:
Current user: sammy@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/run/mysqld/mysqld.sock
Binary data as: Hexadecimal
Uptime: 1 day 21 hours 37 min 49 sec
Threads: 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 プロジェクトが提供するその他のツールを利用することで、単一の場所から複数のプロジェクトを管理する際に発生する可能性のあるフラストレーションの一部を取り除くことができます。これは、反復的でエラーが発生しやすいタスクを合理化し、より重要な作業に集中できるように設計された、比較的シンプルなツールの良い例です。

著者について
Justin Ellingwood

Justin Ellingwood

Justin は、2013 年からデータベース、Linux、インフラストラクチャ、および開発者ツールについて執筆しています。彼は現在、妻と 2 羽のウサギとベルリンに住んでいます。彼は通常、三人称で書く必要はありません。これは関係者全員にとって安心です。