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

MySQL GRANT 權限管理完全指南:語法、權限表、最小權限實踐

     編輯:MySQL 資料庫相關知識

MySQL 權限體系基於授權表 (mysql.user, db, tables_priv...),GRANT 是管理入口。本文系統整理 GRANT 語法、權限層級、常用權限對照表、典型授權場景與安全原則。

1. GRANT 基礎語法

GRANT priv_type [(columns)] ON db.tbl TO 'user'@'host' IDENTIFIED BY 'pwd' [WITH GRANT OPTION];

關鍵要素

  • priv_type:權限類型 (見下表),多個用逗號分隔,ALL PRIVILEGES 代表除 GRANT OPTION 外所有權限。
  • db.tbl:*.* (全局)、db.* (庫級)、db.tbl (表級)、db.* (列級需配合 columns)。
  • user@host:'user'@'%' (任意 IP)、'user'@'localhost' (本地)、'user'@'192.168.1.%' (網段)。
  • IDENTIFIED BY:創建用戶時設密碼;已存在用戶會修改密碼。
  • WITH GRANT OPTION:允許被授權用戶再授權給他人 (謹慎使用)。

2. 權限分類對照表

權限授權表列作用範圍說明
SELECTSelect_priv表讀取數據
INSERTInsert_priv表插入數據
UPDATEUpdate_priv表修改數據
DELETEDelete_priv表刪除數據
INDEXIndex_priv表創建/刪除索引
ALTERAlter_priv表修改表結構
CREATECreate_priv庫/表/索引創建對象
DROPDrop_priv庫/表刪除對象
GRANT OPTIONGrant_priv庫/表授權給他人
REFERENCESReferences_priv庫/表外鍵引用 (未實際生效)
RELOADReload_priv服務器FLUSH 操作
SHUTDOWNShutdown_priv服務器關閉服務器
PROCESSProcess_priv服務器查看/殺死線程
FILEFile_priv服務器文件LOAD DATA/SELECT INTO OUTFILE
REPLICATION SLAVERepl_slave_priv服務器主從復制
REPLICATION CLIENTRepl_client_priv服務器SHOW MASTER/SLAVE STATUS
SUPERSuper_priv服務器CHANGE MASTER、KILL、SET GLOBAL 等
ALL PRIVILEGES-全局除 GRANT OPTION 外所有權限
USAGE--無實際權限 (僅創建用戶)

3. 典型授權場景

應用讀寫帳號 (最小權限)

CREATE USER 'app'@'10.0.1.%' IDENTIFIED BY 'strong_pwd';
GRANT SELECT, INSERT, UPDATE, DELETE ON biz_db.* TO 'app'@'10.0.1.%';

只讀報表帳號

CREATE USER 'ro'@'10.0.2.%' IDENTIFIED BY 'pwd';
GRANT SELECT ON biz_db.* TO 'ro'@'10.0.2.%';

開發/運維帳號 (含 DDL)

CREATE USER 'dev'@'10.0.3.%' IDENTIFIED BY 'pwd';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON biz_db.* TO 'dev'@'10.0.3.%';

主從復制帳號

CREATE USER 'repl'@'10.0.0.%' IDENTIFIED BY 'pwd';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.%';

超級管理員 (僅內網跳板機)

CREATE USER 'admin'@'10.0.0.10' IDENTIFIED BY 'very_strong_pwd';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'10.0.0.10' WITH GRANT OPTION;

4. 撤權與刪除用戶

-- 撤銷特定權限
REVOKE INSERT, UPDATE ON biz_db.* FROM 'app'@'10.0.1.%';

-- 撤銷所有權限 (不刪除用戶)
REVOKE ALL PRIVILEGES ON *.* FROM 'app'@'10.0.1.%';

-- 徹底刪除用戶 (MySQL 5.7+)
DROP USER 'app'@'10.0.1.%';

-- 5.6 及以下
DELETE FROM mysql.user WHERE User='app' AND Host='10.0.1.%';
FLUSH PRIVILEGES;

5. 安全最佳實踐

  1. 最小權限:按業務角色拆分帳號,僅授必要權限。
  2. 限制 Host:禁止 '%' 超級帳號,生產庫僅允許應用服務器 IP 段。
  3. 強密碼策略:啟用 validate_password 插件,強制長度、複雜度、過期輪換。
  4. 定期審計:SELECT User, Host FROM mysql.user;、SHOW GRANTS FOR 'user'@'host'; 清理僵尸帳號。
  5. 避免 GRANT OPTION:除 DBA 帳號外不授予。
  6. 5.7+ 原生角色:CREATE ROLE 'app_rw'; GRANT SELECT,INSERT ON biz_db.* TO 'app_rw'; GRANT 'app_rw' TO 'app1'@'%'; 統一管理權限集合。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved