MySQL 權限體系基於「用戶@主機」二元組,GRANT 授權、REVOKE 回收、FLUSH PRIVILEGES 生效。本文實戰演示:創建本地/遠程用戶、授予庫級/表級/列級權限、查看權限、回收特定權限、ALL PRIVILEGES 具體包含權限清單、通配符主機匹配規則、安全加固建議。
-- 本地用戶
CREATE USER 'byrd'@'localhost' IDENTIFIED BY 'admin123';
-- 授予 gbk 庫所有權限
GRANT ALL ON gbk.* TO 'byrd'@'localhost';
-- 遠程用戶(指定 IP/網段/域名)
GRANT ALL ON gbk.* TO 'remote_user'@'192.168.1.%' IDENTIFIED BY 'admin123';
-- 刷新生效
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'byrd'@'localhost';
輸出解析:
GRANT USAGE ON *.*:連接權限(無實質操作權限)。GRANT ALL PRIVILEGES ON `gbk`.*:庫級全權限。SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX,
ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE,
CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER
注意:不含 GRANT OPTION(授權他人權限)、FILE、SHUTDOWN、PROCESS、SUPER、RELOAD 等管理權限。
-- 僅授予讀寫權限
GRANT SELECT, INSERT, UPDATE, DELETE ON gbk.* TO 'app_user'@'%';
-- 回收 INSERT 權限
REVOKE INSERT ON gbk.* FROM 'byrd'@'localhost';
-- 查看回收後權限
SHOW GRANTS FOR 'byrd'@'localhost';
-- 輸出:SELECT, UPDATE, DELETE, CREATE, DROP, ... (無 INSERT)
| 主機值 | 匹配範圍 | 優先級 |
|---|---|---|
'user'@'localhost' | 本地 Unix socket / 127.0.0.1 | 高 |
'user'@'127.0.0.1' | 僅 TCP 本地回環 | 高 |
'user'@'192.168.1.%' | 192.168.1.0/24 網段 | 中 |
'user'@'%' | 任意主機(最寬鬆) | 低 |
'user'@'%.example.com' | example.com 子域名 | 中 |
原則:最小權限、最具體主機。避免 'root'@'%'。
DROP USER ''@'%';RENAME USER 'root'@'%' TO 'root'@'localhost';VALIDATE_PASSWORD 插件(長度、混合字符、字典檢查)。SELECT user, host FROM mysql.user;、SHOW GRANTS 導出審計。