MySQLのユーザと権限を取得し一覧表示するスクリプト

Tipsです。MySQLのユーザと、権限の一覧を作りたかったのですが、mysql.userテーブルと、show grants forで何とかできそうということで頑張ったのですが、結局シェルにしてしまいました。

rootユーザで以下のコマンド実行します。

for u in $(mysql -Ne  "select concat('\'',user,'\'@\'',host,'\'')  from mysql.user" ) 
do
  echo -e "[$u]"
  echo -e "$(mysql -Ne "show grants for $u")\n"
done

結果はこんな感じです。出力変えたい場合はdoブロック内を適当にいじればOKです。

['root'@'127.0.0.1']
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION

['root'@'::1']
GRANT ALL PRIVILEGES ON *.* TO 'root'@'::1' WITH GRANT OPTION

[''@'localhost']
GRANT USAGE ON *.* TO ''@'localhost'

['root'@'localhost']
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION

[''@'myhost']
GRANT USAGE ON *.* TO ''@'myhost'

['root'@'myhost']
GRANT ALL PRIVILEGES ON *.* TO 'root'@'myhost' WITH GRANT OPTION
GRANT PROXY ON ''@'' TO 'root'@'myhost' WITH GRANT OPTION

もっと良い方法ありそうだけど、一旦メモ。