首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL新增用戶與權限管理完整指南:GRANT語法與授權表操作

     編輯:MySQL 資料庫相關知識

MySQL提供兩種新增用戶的方式:使用GRANT語句(推薦,語法清晰且不易出錯)或直接操作授權表。本文詳細說明兩種方法的操作步驟與實戰範例。

方法一:使用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;

三種典型用戶:

  • monty:全權限超級用戶,可從任意主機連線(需同時建立localhost與%兩條記錄,避免匿名用戶優先匹配導致無法登入)。
  • admin:僅具RELOAD、PROCESS管理權限,無資料庫操作權限,適合執行mysqladmin維護指令。
  • dummy:無密碼、僅限本地連線、無任何權限(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語句與授權表結構的對應關係,能讓權限管理更精準、更安全,避免因匿名用戶優先匹配等陷阱導致的存取異常。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved