MySQL 權限體系基於「用戶@主機」粒度,結合全局/庫/表/列/存儲過程/代理等多層級權限。本文匯總兩種創建用戶姿勢、精細授權模板、刪除清理與遠程連接驗證。
GRANT 一站式創建 + 授權(推薦)-- 全庫全表所有權限,任意主機訪問
GRANT ALL PRIVILEGES ON *.* TO 'yushan'@'%' IDENTIFIED BY '123';
-- 僅指定庫、指定權限、指定主機
GRANT SELECT, INSERT, UPDATE ON `mydb`.* TO 'app_user'@'192.168.1.%' IDENTIFIED BY 'strong_pwd';
-- 刷新生效
FLUSH PRIVILEGES;
ALL PRIVILEGES ≠ GRANT OPTION(授權權限需顯式給予)。IDENTIFIED BY 5.7+ 已棄用,建議分離:CREATE USER ... IDENTIFIED BY ...; GRANT ...;mysql.user 表(不推薦,易遺漏權限列)INSERT INTO mysql.user (Host, User, authentication_string)
VALUES ('localhost', 'yusuhan', PASSWORD('123'));
FLUSH PRIVILEGES;
-- 後續必須補全權限列或用 GRANT 補授權
GRANT ALL ON *.* TO 'yusuhan'@'localhost';
FLUSH PRIVILEGES;
風險:mysql.user 表含 40+ 權限列(Select_priv, Insert_priv...),手動插入極易漏配,導致用戶「有賬無權」。
mysql -u yushan -p -h 192.168.59.123
# -h 指定服務端 IP,若用戶 Host='%' 或匹配該 IP 則可連接
DROP USER 'yushan'@'%'; -- 5.7+ 推薦語法,自動清理所有權限表記錄
-- 或舊版兼容
DELETE FROM mysql.user WHERE User='yushan' AND Host='%';
FLUSH PRIVILEGES;
| 層級 | 語法示例 | 典型權限 |
|---|---|---|
| 全局 | GRANT ... ON *.* | SUPER, RELOAD, SHUTDOWN, PROCESS, FILE, REPLICATION SLAVE/CLIENT, CREATE USER |
| 庫級 | GRANT ... ON db.* | CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER |
| 表級 | GRANT ... ON db.table | SELECT, INSERT, UPDATE, DELETE, REFERENCES |
| 列級 | GRANT SELECT (col1,col2) ON db.table | 敏感字段隔離(如薪資、身份證) |
| 存儲過程/函數 | GRANT EXECUTE ON PROCEDURE db.proc TO user | EXECUTE, ALTER ROUTINE, GRANT OPTION |
| 代理用戶 | GRANT PROXY ON 'proxy_user'@'%' TO 'real_user'@'%' | PROXY |
SELECT/INSERT/UPDATE/DELETE,禁止 DROP/ALTER/TRUNCATE;DDL 由專用運維賬號執行。Host='%',限定應用服務器 IP 段('10.0.1.%')。validate_password 插件,強制長度、複雜度、過期輪換。GRANT SELECT ON *.* TO 'readonly'@'%' ...,從庫專用。SELECT User, Host FROM mysql.user; 掃描無用/過期/過度授權賬號。權限管理是數據庫安全第一道防線。建議將用戶全生命周期(申請、創建、授權、審計、回收)納入 CMDB/工單系統,實現留痕可追溯。