MySQLアカウントのログインパスワードを、開発/運用する人のPCごとに管理している時に、退職や異動などによってパスワードの変更がどうしても必要になってしまった場合に、パスワードの変更周知と変更したパスワードの配布に困ったことはありませんか。
今回は、そんな時に少し便利なmysql_config_editor
について紹介していきます。
mysql_config_editorを使ってみる
mysql_config_editor
はMySQL5.6からバンドルされるようになったコマンドで、パスワードやアカウント、接続情報などを難読化して、LinuxやMacではホームディレクトリの.mylogin.cnf
に、WindowsではAppDataフォルダ内に.mylogin.cnf
というファイルにして置くことができます。
ドキュメントでは暗号化と表記されています。しかし、複号に使う鍵と暗号化されたデータが.mylogin.cnf
内に一緒に格納されており解読ができてしまうため、この記事では「難読化」と表現させていただきます。
余談ではありますが、mysql_config_editor
と似た名前のコマンドにmysql_config
がありますが、こちらはMySQLクライアントやプラグインなどをコンパイルするのに必要な情報を取得するコマンドで、まったくの別物なのでご注意ください。
難読化して登録する
それではさっそくmysql_config_editor
を使って接続情報を難読化してみましょう。登録するにはset
コマンドを使って登録を行います。--login-path
オプションで、mysql_config_editor
で管理をする時の名前を指定しています。このオプションのデフォルト値はclient
です。--host
オプションで接続するホストを指定しています。--user
オプションで接続の際に使用するユーザー名を指定しています。--password
オプションを付けることで保存するパスワードを入力するダイアログを出します。
この他にも、今回は使いませんでしたが、UNIXソケットファイルを指定する--socket
オプションや、port番号を保存するための--port
オプションなどがあります。ただし、--socket
オプションや--port
オプションは5.6.11から導入された機能になりますのでご注意ください。
以上のようにコマンドを実行すると、LinuxとMacでは以下のように現在のユーザのホームディレクトリに.mylogin.cnf
ファイルが作成されていることがわかります。
このようにcatを使って.mylogin.cnf
ファイルの中身を表示してみようとしてみても、難読化されているため読めないことがわかります。
Windowsでは、AppDataフォルダ内に.mylogin.cnf
ファイルが作成されていることがわかります。
難読化した情報を確認する
ここでは登録された情報を確認してみましょう。以下のようにprintコマンドを使うと、登録した情報を確認することができます。--all
オプションを使うと登録されている接続情報を確認することができます。
また、--login-path
オプションを指定することで個別に表示することもできます。
接続する
次に、登録した情報を使って接続してみましょう。接続に利用するには、mysqlクライアントに--login-path
で接続したいログインパスを設定します。
接続情報を削除する
登録した情報を消したい場合は、remove
コマンドもしくはreset
コマンドを使います。
remove
コマンドを使う場合は、以下のように--login-path
と消したい情報をオプションとして付与します。以下では--host
オプションを使っています。--login-path
を設定しなかった場合はデフォルトのclientの情報を削除します。
続いて--reset
オプションですが、こちらのオプションを付けて実行すると、登録した情報すべてが文字通りリセットされて削除されます。
上記のように2件の登録があった場合、以下のように実行すると登録された情報がすべて削除されていることがわかります。
5.6以前のMySQLで同様のことがしたい場合
mysql_config_editor
が使える環境ではないけれども、mysqlクライアントでログインする際に、パスワードを打ち込むのが辛い場合があります。たとえば、複数台のMySQLを管理していてパスワードを管理しきれない場合や、cron等でbatchを実行する際にcronにパスワードを直書きするような事を避けたい場合等です。
そういった場合には、難読化はできませんが、以下のようにmy.cnf
ファイルにパスワードを書いておくことで認証を楽にできます。
こちらを利用すると以下のようにログインすることができます。
また、このmy.cnf
ファイルにパスワードを書いておくと、難読化すらされてない状態になるためパーミッションを適切に設定するなどの対策を実施して、他のユーザから見えないようにする必要があります。うっかり隣に人がいる状態でcat
コマンドなどで確認した時に、中身が見えてしまうこともあるので注意しましょう。
まとめ
mysql_config_editor
で設定したキーがあれば、IDや生パスワードを知らなくてもログインができるようになるため、環境を5.6またはそれ以降で揃えることができるのであれば設定しておくと便利かもしれません。
しかし、mysql_config_editor
で生成された.mylogin.cnf
ファイルに入っているパスワードは難読化はされているものの、解読しようとすれば読めてしまうことがわかっているため、過信をせずに取り扱いには注意しましょう。