首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 權限管理全攻略:GRANT 與 REVOKE 實戰詳解

     編輯:MySQL 綜合教學

MySQL 用戶授權與回收核心語法

GRANT 與 REVOKE 是 MySQL 權限控制的核心,採用「最小權限原則」按層級精準分配,避免過度授權風險。

基礎語法結構

GRANT 權限列表 ON 對象 TO '用戶'@'主機' [IDENTIFIED BY '密碼'] [WITH GRANT OPTION];
REVOKE 權限列表 ON 對象 FROM '用戶'@'主機';

五大典型授權場景

1. 普通數據用戶(增刪改查)

GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'app_user'@'%';

2. 開發人員(DDL + 程序對象)

GRANT CREATE, ALTER, DROP, INDEX, CREATE VIEW, SHOW VIEW,
      CREATE ROUTINE, ALTER ROUTINE, EXECUTE,
      CREATE TEMPORARY TABLES, REFERENCES
   ON testdb.* TO 'dev_user'@'192.168.0.%';

3. 單庫 DBA

GRANT ALL PRIVILEGES ON testdb.* TO 'dba'@'localhost';

4. 超級 DBA(全庫全表)

GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

5. 列級/存儲過程級精細控制

# 列級
GRANT SELECT (id, name, email) ON testdb.users TO 'report'@'%';

# 存儲過程/函數
GRANT EXECUTE ON PROCEDURE testdb.proc_name TO 'api'@'%';
GRANT EXECUTE ON FUNCTION testdb.func_name TO 'api'@'%';

權限生效與查看

  • 即時生效:MySQL 5.6+ 修改權限後無需 FLUSH PRIVILEGES,但舊版本或手動修改 mysql.user 表需執行
  • 查看當前用戶:SHOW GRANTS;
  • 查看指定用戶:SHOW GRANTS FOR 'user'@'host';

五大授權表結構

表名作用範圍說明
user全局(超級用戶)連接驗證、全局權限
db數據庫級特定庫的所有表權限
host主機+數據庫配合 db 表做主機級訪問控制,不受 GRANT/REVOKE 影響
tables_priv表級單表所有列的權限
columns_priv列級單表特定列的權限

關鍵注意事項

  1. 權限生效需重連:已連接會話不受影響,新連接才生效
  2. 慎用 WITH GRANT OPTION:允許被授權者再授權,易失控,生產環境建議僅 DBA 持有
  3. 撤銷語法:將 TO 改為 FROM,如 REVOKE ALL ON *.* FROM 'user'@'host';
  4. 主機匹配:% 匹配所有 IP,localhost 僅本地 socket,192.168.0.% 支持網段

建立標準化授權流程,配合定期 SHOW GRANTS 審計,構建安全合規的數據庫權限體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved