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

MySQL GRANT 權限管理完整語法與實戰範例

     編輯:MySQL 綜合教學

MySQL 權限系統採用 GRANT / REVOKE,支援全域、庫、表、欄、程序六個層級。本文整理最常用授權模板。

通用語法


GRANT 權限列表 ON 物件 TO '用戶'@'主機' [IDENTIFIED BY '密碼'] [WITH GRANT OPTION];

分層級授權範例

層級語法範例說明
全域GRANT SELECT ON *.* TO 'readonly'@'%';所有庫所有表
單庫GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'app'@'%';常見應用帳號
單表GRANT SELECT, INSERT ON testdb.orders TO 'etl'@'10.0.0.%';ETL 專用
單欄GRANT SELECT(id, name, email) ON testdb.users TO 'api'@'%';敏感欄位隔離
存儲過程/函數GRANT EXECUTE ON PROCEDURE testdb.p_calc TO 'app'@'%';僅授權執行

開發/管理角色常用組合


-- 開發人員:建表、索引、視圖、程序
GRANT CREATE, ALTER, DROP, INDEX, CREATE VIEW, SHOW VIEW,
      CREATE ROUTINE, ALTER ROUTINE, EXECUTE
ON dev_db.* TO 'dev'@'192.168.0.%';

-- DBA:全權限 + 授權權限
GRANT ALL PRIVILEGES ON *.* TO 'dba'@'localhost' WITH GRANT OPTION;

-- 唯讀報表
GRANT SELECT ON *.* TO 'report'@'%';

-- 複寫帳號
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%';

撤銷與清理


REVOKE ALL PRIVILEGES ON *.* FROM 'old_user'@'%';
DELETE FROM mysql.user WHERE user='old_user' AND host='%';
FLUSH PRIVILEGES;

查看權限


SHOW GRANTS FOR 'app'@'%';
SHOW GRANTS;  -- 當前用戶

MySQL 8.0 新特性:角色


CREATE ROLE 'app_read', 'app_write';
GRANT SELECT ON db.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON db.* TO 'app_write';
GRANT 'app_read', 'app_write' TO 'user1'@'%';
SET DEFAULT ROLE ALL TO 'user1'@'%';

避坑提醒

  • GRANT 不會自動建立用戶 (5.7+ 已移除隱含建立),需先 CREATE USER
  • WITH GRANT OPTION 允許受權者再授權,僅限 DBA 角色
  • 主機 % 含 localhost,但 localhost 走 Unix Socket,127.0.0.1 走 TCP,需分別授權或用 %
  • 定期 SELECT user, host FROM mysql.user 審計孤帳號
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved