FLUSH PRIVILEGES、易遺漏欄位root 連線root 擁有 INSERT(mysql.db)與 RELOAD 權限mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost';
mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';
| 用戶 | 來源 | 密碼 | 權限 | 角色 |
|---|---|---|---|---|
| monty | localhost + % | something | 全域所有 + GRANT OPTION | 超級管理員 |
| admin | localhost | 無 | RELOAD, PROCESS | 運維帳號 |
| dummy | localhost | 無 | USAGE(無實權) | 預留帳號 |
關鍵:必須同時建立user@localhost和user@%,否則匿名用戶優先匹配導致本地連線失效。
用戶 custom 從三主機連線,密碼 stupid,分庫分主機授權:
GRANT SELECT,INSERT,UPDATE,DELETE ON bankaccount.* TO 'custom'@'localhost' IDENTIFIED BY 'stupid';
GRANT SELECT,INSERT,UPDATE,DELETE ON expenses.* TO 'custom'@'whitehouse.gov' IDENTIFIED BY 'stupid';
GRANT SELECT,INSERT,UPDATE,DELETE ON customer.* TO 'custom'@'localhost' IDENTIFIED BY 'stupid';
GRANT SELECT,INSERT,UPDATE,DELETE ON customer.* TO 'custom'@'server.domain' IDENTIFIED BY 'stupid';
GRANT SELECT,INSERT,UPDATE,DELETE ON customer.* TO 'custom'@'whitehouse.gov' IDENTIFIED BY 'stupid';
INSERT INTO user VALUES('localhost','monty',PASSWORD('something'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO user VALUES('%','monty',PASSWORD('something'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO user SET Host='localhost', User='admin', Reload_priv='Y', Process_priv='Y';
INSERT INTO user (Host,User,Password) VALUES('localhost','dummy','');
FLUSH PRIVILEGES;
注意:MySQL 版本不同,user 表權限欄位數量不同。強烈建議使用 GRANT。
# 查看權限
SHOW GRANTS FOR 'monty'@'localhost';
# 撤銷權限
REVOKE ALL PRIVILEGES ON *.* FROM 'monty'@'localhost';
# 刪除用戶
DROP USER 'monty'@'localhost';