MySQL 用戶權限管理是資料庫安全的核心防線。透過精細的權限控制,我們能限制用戶存取特定資料庫、資料表,規範 SELECT、INSERT、UPDATE、DELETE 等操作權限,甚至限制登入來源 IP 或域名,以及控制權限是否可轉授。本文系統梳理 MySQL 權限管理的完整生命週期,包含授權、刷新、查看、回收、刪除、重命名與密碼修改等核心操作,並附上實戰指令與注意事項,助你構建安全合規的資料庫環境。
MySQL 權限體系主要發揮四大作用:
GRANT ALL PRIVILEGES ON *.* TO 'yangxin'@'%' IDENTIFIED BY 'yangxin123456' WITH GRANT OPTION;
test.user'yangxin'@'192.168.0.%' 僅允許該網段登入GRANT 授權採疊加機制,不會覆蓋既有權限。例如先授 SELECT,再授 INSERT,用戶將同時擁有兩項權限。完整權限清單請參考 MySQL 官方文檔。

權限變更後必須執行 FLUSH PRIVILEGES; 將記憶體中權限資訊寫入資料庫,否則變更不生效。
SHOW GRANTS FOR 'yangxin'@'localhost';

REVOKE CREATE ON *.* FROM 'yangxin'@'localhost'; FLUSH PRIVILEGES;
上例移除 yangxin 的 CREATE 權限,該用戶將無法建立資料庫與資料表。
DROP USER 'yangxin'@'localhost';
執行前可先查詢現有用戶:
SELECT host, user FROM mysql.user;
RENAME USER 'test3'@'%' TO 'test1'@'%';
USE mysql;
-- MySQL 5.7 之前
UPDATE user SET password=PASSWORD('123456') WHERE user='root';
-- MySQL 5.7 之後
UPDATE user SET authentication_string=PASSWORD('123456') WHERE user='root';
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
mysqladmin -u root -p123456 password 1234abcd
注意:mysqladmin 位於 MySQL 安裝目錄的 bin 目錄下。
my.cnf,在 [mysqld] 區段添加 skip-grant-tablesservice mysqld restartskip-grant-tables,再次重啟服務
mysqldump mysql user db tables_priv columns_priv > grants_backup.sql