CREATE USER 'user'@'host' IDENTIFIED BY 'password';
-- 指定加密密碼
CREATE USER 'user'@'host' IDENTIFIED BY PASSWORD '*hash';
需具備 CREATE USER 全域權限或 mysql.user 的 INSERT 權限。帳號建立後無任何權限,需另行 GRANT。
語法:GRANT privileges ON db.tbl TO 'user'@'host' IDENTIFIED BY 'pass' [WITH GRANT OPTION];
-- 超級管理員 (本機 + 遠端)
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'pass' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'pass' WITH GRANT OPTION;
-- 運維帳號 (僅管理權限)
GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost';
-- 佔位帳號 (無權限,後續再給)
GRANT USAGE ON *.* TO 'dummy'@'localhost';
關鍵點:同時建立 'user'@'localhost' 與 'user'@'%' 可避免匿名用戶優先匹配導致權限異常。
INSERT INTO mysql.user (Host,User,Password,Select_priv,Insert_priv,...)
VALUES ('localhost','monty',PASSWORD('pass'),'Y','Y',...);
INSERT INTO mysql.user (Host,User,Password) VALUES ('localhost','dummy','');
FLUSH PRIVILEGES;
需手動 FLUSH PRIVILEGES 重載權限;密碼必須用 PASSWORD() 加密。
-- 用戶 custom 分別存取三個資料庫,限制來源主機
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON bankaccount.* TO 'custom'@'localhost' IDENTIFIED BY 'obscure';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON expenses.* TO 'custom'@'whitehouse.gov' IDENTIFIED BY 'obscure';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON customer.* TO 'custom'@'server.domain' IDENTIFIED BY 'obscure';
若用 INSERT 寫授權表,需同時向 mysql.user 與 mysql.db 插入記錄,最後 FLUSH PRIVILEGES。
GRANT ALL ON *.* TO 'myname'@'%.mydomain.com' IDENTIFIED BY 'mypass';
-- 等同 INSERT
INSERT INTO mysql.user (Host,User,Password) VALUES ('%.mydomain.com','myname',PASSWORD('mypass'));
FLUSH PRIVILEGES;
DROP USER 'user'@'host';