====== MySQL - Export users with grants ======
Make it easy to have all the queries needed to determine the grants for every user.
mysql> SELECT DISTINCT CONCAT('SHOW GRANTS FOR \'', user, '\'@\'', host, '\';') AS query FROM mysql.user;
+-------------------------------------------------+
| query |
+-------------------------------------------------+
| SHOW GRANTS FOR 'root'@'127.0.0.1'; |
| SHOW GRANTS FOR 'root'@'::1'; |
| SHOW GRANTS FOR 'debian-sys-maint'@'localhost'; |
| SHOW GRANTS FOR 'email'@'localhost'; |
| SHOW GRANTS FOR 'greylist'@'localhost'; |
| SHOW GRANTS FOR 'mysql.sys'@'localhost'; |
| SHOW GRANTS FOR 'root'@'localhost'; |
| SHOW GRANTS FOR 'roundcube'@'localhost'; |
| SHOW GRANTS FOR 'roundcubeuser'@'localhost'; |
| SHOW GRANTS FOR 'snort'@'localhost'; |
| SHOW GRANTS FOR 'spamassassin'@'localhost'; |
| SHOW GRANTS FOR 'wiki'@'localhost'; |
| SHOW GRANTS FOR 'wiki'@'localhost.localdomain'; |
+-------------------------------------------------+
13 rows in set (0.00 sec)
Then get the actual grants for that user.
mysql> SHOW GRANTS FOR 'email'@'localhost';
+-------------------------------------------------------------------+
| Grants for email@localhost |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'email'@'localhost' |
| GRANT ALL PRIVILEGES ON `email_accounts`.* TO 'email'@'localhost' |
+-------------------------------------------------------------------+
2 rows in set (0.00 sec)
To combine all the above, run this query:
### mysql -uroot -p{PASS} -B -N -e "SELECT DISTINCT CONCAT('SHOW GRANTS FOR \'', user, '\'@\'', host, '\';') AS query FROM mysql.user" | mysql -uroot -p{PASS} | sed 's/\(GRANT .\)/\1;/;s/^\(Grants for .\)/## \1 ##/;/##/{x;p;x;}'