首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 權限管理全解析:SHOW GRANTS 與 GRANT 命令實戰指南

     編輯:MySQL 資料庫相關知識

一、查看用戶權限

SHOW GRANTS FOR 'user'@'host';
-- 例
SHOW GRANTS FOR 'root'@'localhost';

輸出為可直接執行的 GRANT 語句,便於遷移/審計。

二、GRANT 命令語法詳解

GRANT <privileges> ON <object> TO '<user>'@'<host>'
    [IDENTIFIED BY '<password>']
    [WITH GRANT OPTION];

1. 權限類型

類別權限說明
數據庫/表/列級SELECT查詢表數據
INSERT插入數據
UPDATE修改數據
DELETE刪除數據
CREATE創建庫/表
DROP刪除庫/表
INDEX創建/刪除索引
ALTER修改表結構
全局管理級FILE服務器文件讀寫
PROCESS查看/殺死其他線程
RELOAD刷新權限表、日志等
SHUTDOWN關閉服務器
特殊ALL PRIVILEGES除 GRANT OPTION 外所有權限
USAGE僅允許連接,無任何操作權限

2. 對象作用範圍

  • *.*:所有庫所有表(全局)。
  • db.*:指定庫所有表。
  • db.tbl:指定庫指定表。
  • db.tbl(col1, col2):列級權限(僅支持 SELECT/INSERT/UPDATE/REFERENCES)。

3. 用戶標識

  • 'user'@'host':用戶名 + 主機名/IP。
  • % 通配符:'user'@'%' 允許任意主機;'user'@'192.168.1.%' 限制網段。

4. IDENTIFIED BY / WITH GRANT OPTION

  • IDENTIFIED BY 'pwd':創建用戶或修改密碼(會覆蓋原密碼)。
  • WITH GRANT OPTION:允許用戶將自己擁有的權限授予他人,**慎用**,可能導致權限傳遞失控。

三、實戰示例

示例 1:創建庫級管理員

GRANT ALL ON db.* 
TO 'dbmanager'@'server.host.net' 
IDENTIFIED BY 'managedb' 
WITH GRANT OPTION;

示例 2:修改現有用戶密碼(不改權限)

GRANT USAGE ON *.* 
TO 'dbmanager'@'server.host.net' 
IDENTIFIED BY 'funkychicken';

示例 3:列級權限控制

-- 庫級只讀
GRANT SELECT ON db.* 
TO 'jessica'@'%.host.net' 
IDENTIFIED BY 'jessrules';

-- 表級特定列可寫
GRANT UPDATE (name, email) ON db.Users 
TO 'jessica'@'%.host.net';

四、配套命令

  • REVOKE:撤銷權限,語法同 GRANT。
  • DROP USER 'user'@'host':刪除用戶(5.0.2+)。
  • SET PASSWORD FOR 'user'@'host' = PASSWORD('newpwd'):修改密碼。
  • FLUSH PRIVILEGES:直接操作 grant 表後需刷新生效(GRANT 通常自動刷新)。

五、最佳實踐原則

  1. 最小權限原則:只授予業務必需的最小權限集。
  2. 網段限制:避免 'user'@'%',限制應用服務器 IP 段。
  3. 分離賬號:讀寫分離賬號、管理賬號、監控賬號分離。
  4. 定期審計:SELECT * FROM mysql.user、SHOW GRANTS 定期巡檢。
  5. 避免 GRANT OPTION:除 DBA 外不授予,防止權限蔓延。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved