介紹如何查詢 MySQL/MariaDB 資料庫的使用者帳號有哪些,以及各有那些使用權限。
若要查詢 MySQL/MariaDB 資料庫中有哪一些使用者帳號,可以先用 root
管理者登入之後,再用以下的指令查詢:
-- 查詢資料庫使用者 SELECT User FROM mysql.user;
+-------------+ | User | +-------------+ | root | | root | | root | | officeguide | | root | +-------------+
如果只要列出不重複的使用者名稱,可以加上 DISTINCT
:
-- 查詢資料庫使用者(刪除重複的) SELECT DISTINCT User FROM mysql.user;
+-------------+ | User | +-------------+ | root | | officeguide | +-------------+
因為 MySQL/MariaDB 資料庫的使用者帳號是有區分來源主機的,若來源主機不同則視為不同帳號,所以查看帳號時通常要連同來源主機一起看:
-- 查詢資料庫使用者與來源主機 SELECT User, Host FROM mysql.user;
+-------------+-----------------+ | User | Host | +-------------+-----------------+ | root | 127.0.0.1 | | root | ::1 | | root | desktop-rtre85j | | officeguide | localhost | | root | localhost | +-------------+-----------------+
若要查詢各使用者帳號的資料庫存取權限,可以使用 SHOW GRANTS
指令:
-- 查詢使用者的細部權限 SHOW GRANTS FOR 'officeguide'@'localhost';
+--------------------------------------------------------------------------------------------------------------------+ | Grants for officeguide@localhost | +--------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'officeguide'@'localhost' IDENTIFIED BY PASSWORD '*4B0FC9D71B9D953B1D371128BB9E294A7B1ABA73' | | GRANT ALL PRIVILEGES ON `officeguide_db`.* TO 'officeguide'@'localhost' | +--------------------------------------------------------------------------------------------------------------------+
以下指令可以幫助管理者產生用來查詢使用者細部權限的指令:
-- 產生查詢使用者細部權限指令 SELECT DISTINCT CONCAT('SHOW GRANTS FOR ', QUOTE(user), '@', QUOTE(host), ';') AS query FROM mysql.user;
+--------------------------------------------+ | query | +--------------------------------------------+ | SHOW GRANTS FOR 'root'@'127.0.0.1'; | | SHOW GRANTS FOR 'root'@'::1'; | | SHOW GRANTS FOR 'root'@'desktop-rtre85j'; | | SHOW GRANTS FOR 'officeguide'@'localhost'; | | SHOW GRANTS FOR 'root'@'localhost'; | +--------------------------------------------+
如果想要更改使用者的密碼(例如忘記密碼)或是使用權限,可以參考 MySQL/MariaDB 資料庫使用者帳號管理教學。
參考資料:nixCraft