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

MySQL 新增用戶權限完整指南:GRANT 與授權表雙軌實作

     編輯:MySQL 資料庫相關知識

MySQL 新增用戶主要有兩種方式:GRANT 語句(推薦,語法簡潔、錯誤率低)與 直接操作授權表(需手動 FLUSH PRIVILEGES)。本文以實戰範例詳細說明兩種做法的完整流程與注意事項。

前置條件

  • 本機登入 MySQL 伺服器
  • 以 root 身分連線
  • root 擁有 mysql 資料庫的 INSERT 權限與 RELOAD 管理權限

方法一:GRANT 語句(推薦)

建立三類示範用戶

GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY 'something' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO monty@"%" IDENTIFIED BY 'something' WITH GRANT OPTION;
GRANT RELOAD, PROCESS ON *.* TO admin@localhost;
GRANT USAGE ON *.* TO dummy@localhost;

用戶說明:

  • monty:全權限超級用戶,可從任意主機連線,需密碼。須同時建立 @localhost 與 @"%" 兩條記錄,否則匿名用戶優先權較高會導致本機連線失敗。
  • admin:僅具 RELOAD、PROCESS 管理權限,無資料庫操作權限,本機免密登入。
  • dummy:僅具 USAGE(連線權限),本機免密登入,後續再授予具體資料庫權限。

複雜場景:custom 多主機分庫授權

需求:custom 從 localhost、server.domain、whitehouse.gov 連線,密碼 stupid,分別存取 bankaccount、expenses、customer 三庫。

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 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 表權限欄位數量不同(3.22.11 前較少),需對應調整 Y 數量。admin 使用 SET 語法需 3.22.11+ 版本。

custom 多主機分庫授權(直接操作表)

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;

前三條建立連線帳號(權限全為 N),後三條在 db 表授予具體庫權限。修改授權表後必須執行 FLUSH PRIVILEGES 才生效。

萬用字元主機名

允許某網域所有主機:GRANT ... TO user@"%.mydomain.com" 或 INSERT INTO user VALUES ('%.mydomain.com', ...)。

圖形化管理工具

亦可使用 xmysqladmin、mysql_webadmin、xmysql(位於 MySQL Contrib 目錄)進行視覺化授權管理。

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