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
もっと良い方法ありそうだけど、一旦メモ。