MySQL 使用者權限後,查詢通常可以查看 MySQL 內部的 mysql.user Table 來查詢各個權限,不過想查看更詳細的,可以靠 SHOW GRANTS 來達成。
MySQL 的 SHOW GRANTS 參數不多,蠻簡單的~
- SHOW GRANTS [FOR user_or_role [USING role [, role] ...]]
- SHOW GRANTS;
- SHOW GRANTS FOR CURRENT_USER;
- SHOW GRANTS FOR CURRENT_USER();
- e.g:
- SHOW GRANTS;
- SHOW GRANTS FOR username@localhost;
- SHOW GRANTS FOR 'username'@'localhost';
不過這次除了這些操作外,還遇到一些習慣上的問題,查詢才知道 SHOW GRANTS 都不支援,在此順便做點紀錄,避免自己再犯浪費時間~
MySQL 查看 GRANT 使用者授權內容
查看 username 的授權資訊,因為 Host 有 % 造成下述錯誤:
- mysql> SHOW GRANTS FOR username@10.1.1.%;
- ERROR 1470 (HY000): String 'username@10.1.1.%' is too long for user name (should be no longer than 16)
解法
- mysql> SHOW GRANTS FOR username@"10.1.1.%";
- 要把 Host 有 % 那塊分別使用 " 或 ' 包起來
pt-table-sync 需要 SUPER 的權限,想一次查詢所有帳號 GRANT 的權限:
- username@10.1.1.% 這些,可以使用 SELECT concat(User,'@',Host) FROM mysql.user 組合出來,於是就想說能不能用類似下述這招:
- mysql> SHOW GRANTS FOR (SELECT concat(User,'@',Host) FROM mysql.user);
- ERROR 1064 (42000): You have an error in your SQL syntax;
- 主要是 SHOW GRANTS 不支援 Subquery。(註:13.2.11 Subqueries)
- mysql> SHOW GRANTS FOR (SELECT concat(User,'@',Host) FROM mysql.user);
- 最後還是乾脆直接查表看 Super_priv 是否等於 "Y" 就好
- SELECT concat(User,'@',Host) FROM mysql.user WHERE Super_priv="Y";
- 再由這些出來的,分別去 SHOW GRANTS FOR root@localhost; 等等來查詢