痛いところは煙に巻く

製造業のしがない社内SEが日記代わりにいろいろ書く

Hello,World

Üben Sie es nur recht fleißig, so wird es schon gehen

MySQLをbatファイルからセキュアに操作する

WindowsServerにMySQLをインストールして運用するなんて稀だ。稀すぎてネットの海ではそう簡単に見つけられない。この無名なブログに頼る必要があるほどないわけでもないが、忘れないようにメモ。先日Windows batファイルからMySQLを操作してクエリログをローテーションする記事を書いた。その時の記事はこちら。
bishop.hatenadiary.com

この記事で使ったコマンドで、

mysql --defaults-extra-file=hoge.cnf -e "set global general_log=0;"

というものがあった。mysqlのコマンド引数には、-uや-pでユーザを指定したりパスワードを平打ちできるものがある。分かりやすいように便宜的に”平打ち引数”と呼ぼう。この平打ち引数は、通常コマンドプロンプトからMySQLをいじるときは当然楽で便利なのだが、MySQL5.6からWarningが出るようになった。

Warning: Using a password on the command line interface can be insecure.

セキュリティに問題がありますよって。
確かに。
実際batファイルでも実行はされてるので、気にしない人は気にしなくても構わないが、コマンドラインのセキュリティに不安を感じる諸兄は、セキュリティ情報を隔離して別途読み込みする方法が無難だろう。それが、--defaults-extra-fileオプションである。その使い方を説明、メモしておく。

設定ファイルの準備

まずは、下記を記述したファイルを用意しよう。

[client]
user=hoge
password=hogehoge

hogeとhogehogeは諸兄の環境で適宜変更してください。ファイル名はなんでもいいが、拡張子はcnfで保存する。保存する場所もどこでもいい。作るbatファイルと同じところに置いても構わないが、おススメはしない。また、MySQL自体の設定ファイルであるmy.iniがMySQLのインストールフォルダにあると思うが、これとは別ファイルにする。今回は「hoge.cnf」という名前で、Dドライブのetcフォルダ(D:\etc)に保存したと仮定して、サンプルを作る。

batファイル本体

@echo off

mysql --defaults-extra-file=D:\etc\hoge.cnf -d "testdb" -e "select * from user_master"

pause

このサンプルでは、--defaults-extra-fileオプションで接続情報として先ほど作成したhoge.cnfを読み込んでいる。-dオプションで接続先のDBを指定して-eでSQLを実行していることとなる。実際には、バッチファイルで直接SQLを実行することって今どきそんなにないと思うので、先のログローテーションや、Windowsで立ててしまったために監視やらなんやらをbatやVBSでなんとかしたい場合に使うことになると思う。例えばshow slave statusでレプリケーションの状態を定期的に取得したい時とか。

まとめ

必要な手順は下記

  1. 接続情報を記述した拡張子cnfの設定ファイル
  2. --defaults-extra-fileオプションで用意したcnfファイルを指定してmysqlコマンドを実行

スポンサーリンク