MySQL提供兩種新增用戶的方式:使用GRANT語句(推薦,語法清晰且不易出錯)或直接操作授權表。本文詳細說明兩種方法的操作步驟與實戰範例。
前提條件:以root帳號連線本機MySQL,且擁有mysql資料庫的INSERT權限與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;
三種典型用戶:
localhost與%兩條記錄,避免匿名用戶優先匹配導致無法登入)。RELOAD、PROCESS管理權限,無資料庫操作權限,適合執行mysqladmin維護指令。USAGE),預留未來授權使用。用戶custom需從localhost、server.domain、whitehouse.gov三主機連線,分別存取不同資料庫:
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON bankaccount.* TO custom@localhost IDENTIFIED BY 'stupid'; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON expenses.* TO custom@whitehouse.gov IDENTIFIED BY 'stupid'; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON customer.* TO custom@'%' IDENTIFIED BY 'stupid';
同樣建立上述三用戶,需手動INSERT至user與db表,最後執行FLUSH PRIVILEGES生效:
INSERT INTO user (Host,User,Password) VALUES('localhost','custom',PASSWORD('stupid'));
INSERT INTO user (Host,User,Password) VALUES('server.domain','custom',PASSWORD('stupid'));
INSERT INTO user (Host,User,Password) VALUES('whitehouse.gov','custom',PASSWORD('stupid'));
INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)
VALUES('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');
INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)
VALUES('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');
INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)
VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y');
FLUSH PRIVILEGES;
GRANT ... ON *.* TO myusername@"%.mydomainname.com" IDENTIFIED BY 'mypassword';
-- 或直接操作授權表
INSERT INTO user VALUES ('%.mydomainname.com', 'myusername', PASSWORD('mypassword'), ...);
FLUSH PRIVILEGES;
亦可使用xmysqladmin、mysql_webadmin、xmysql等圖形化工具管理授權表(位於MySQL的Contrib目錄)。
掌握GRANT語句與授權表結構的對應關係,能讓權限管理更精準、更安全,避免因匿名用戶優先匹配等陷阱導致的存取異常。