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

MySQL 用戶授權實戰:GRANT 語法 vs 直接操作授權表完整指南

     編輯:MySQL 資料庫相關知識

MySQL 權限系統靈活強大,新增用戶、分配權限有兩條路徑:推薦的 GRANT 語句,與底層直接操作 mysql.user、db 等授權表。本文雙軌並行,讓你深入理解權限本質。

方法一:GRANT 語句(推薦,語法清晰、自動加密、自動刷新)

基本語法

GRANT 權限列表 ON 資料庫.表 TO '用戶'@'主機' IDENTIFIED BY '密碼' [WITH GRANT OPTION];

經典案例

-- 1. 超級管理員(全庫全表所有權限,含授權權限)
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;

-- 2. 運維帳號(僅管理權限,無資料權限)
GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost';

-- 3. 佔位用戶(無任何權限,後續再給)
GRANT USAGE ON *.* TO 'dummy'@'localhost';

關鍵點解析

  • monty@localhost 和 monty@% 必須都建立,否則匿名用戶 @localhost 優先級更高會攔截連線。
  • WITH GRANT OPTION 允許該用戶把自己的權限轉授給他人。
  • USAGE 等同於「無權限」,用於先建帳號再補權限。

方法二:直接操作授權表(理解底層、舊版本無 GRANT 時必用)

對應上述案例的 INSERT 寫法

-- 1. 超級管理員(需填滿所有權限欄位為 'Y')
INSERT INTO user VALUES('localhost','monty',PASSWORD('pass'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO user VALUES('%','monty',PASSWORD('pass'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

-- 2. 運維帳號(只給 RELOAD、PROCESS)
INSERT INTO user SET Host='localhost', User='admin', Reload_priv='Y', Process_priv='Y';

-- 3. 佔位用戶
INSERT INTO user (Host,User,Password) VALUES('localhost','dummy','');

-- 關鍵:修改授權表後必須刷新生效
FLUSH PRIVILEGES;

資料庫級權限:操作 db 表

-- 用戶 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;

通配符主機:開放整個網域

-- GRANT 寫法
GRANT ... ON *.* TO 'user'@'%.mydomain.com' IDENTIFIED BY 'pass';

-- 直接操作 user 表
INSERT INTO user VALUES ('%.mydomain.com','user',PASSWORD('pass'),...);
FLUSH PRIVILEGES;

工具輔助

圖形化工具:phpMyAdmin、MySQL Workbench、Adminer 皆提供直觀權限管理介面,生產環境建議使用工具降低手誤風險。

核心差異總結

維度GRANT直接操作授權表
密碼加密自動 PASSWORD()手動呼叫 PASSWORD()
生效方式即時需 FLUSH PRIVILEGES
錯誤風險低高(欄位順序、數量易對錯)
適用版本3.22.11+所有版本
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved