X

MySQL 查看 GRANT 使用者授權內容

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)
  • 最後還是乾脆直接查表看 Super_priv 是否等於 "Y" 就好
    • SELECT concat(User,'@',Host) FROM mysql.user WHERE Super_priv="Y";
    • 再由這些出來的,分別去 SHOW GRANTS FOR root@localhost; 等等來查詢

相關網頁

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post