萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 用戶與權限管理全攻略:GRANT、直操作表、phpMyAdmin 三種方式詳解

MySQL 權限系統基於「用戶@主機」模型,支援全局、庫級、表級、列級、存儲過程級多層次授權。本文詳細講解 GRANT 語句、直接操作 mysql.user/db 系統表、圖形化工具 phpMyAdmin 三種管理方式,並附權限項完整速查表。

核心概念

  • 用戶標識:'username'@'host',host 支援 %(任意)、192.168.1.%(通配)、localhost(本地 Unix socket)、具體 IP
  • 權限層級:GLOBAL > DATABASE > TABLE > COLUMN > ROUTINE
  • 權限表:mysql.user(全局)、mysql.db(庫級)、mysql.tables_priv(表級)、mysql.columns_priv(列級)、mysql.procs_priv(存儲過程)

方式一:GRANT 語句(推薦、標準)

語法

GRANT priv_type [(columns)] ON [db.]tbl_name TO 'user'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];

常用範例

-- 全庫全表所有權限(相當於 root)
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

-- 特定庫讀寫權限
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON mydb.* TO 'app_user'@'192.168.1.%' IDENTIFIED BY 'password';

-- 僅讀權限
GRANT SELECT ON mydb.* TO 'readonly'@'%' IDENTIFIED BY 'password';

-- 列級權限(敏感欄位保護)
GRANT SELECT (id, name, email), UPDATE (name, email) ON mydb.users TO 'hr'@'localhost';

刷新生效

FLUSH PRIVILEGES;

MySQL 8.0+ 多數 GRANT 隱式刷新,但建議保留習慣。

撤銷權限

REVOKE INSERT, UPDATE ON mydb.* FROM 'app_user'@'192.168.1.%';
FLUSH PRIVILEGES;

刪除用戶

DROP USER 'test'@'localhost';
-- 或舊版
DELETE FROM mysql.user WHERE User='test' AND Host='localhost';
FLUSH PRIVILEGES;

方式二:直接操作權限表(底層、靈活、危險)

-- 創建用戶(需手動填寫所有權限列)
INSERT INTO mysql.user (Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject)
VALUES ('192.168.206.%', 'high_vod', PASSWORD('high_vod'), '', '', '');

-- 庫級權限
INSERT INTO mysql.db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Create_tmp_table_priv, Lock_tables_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Execute_priv, Event_priv, Trigger_priv)
VALUES ('192.168.206.%', 'high_vod', 'high_vod', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

FLUSH PRIVILEGES;

警告:MySQL 8.0 權限表結構大變(authentication_string、password_expired、account_locked 等),直操作極易出錯,**強烈不推薦**生產環境使用。

方式三:phpMyAdmin 圖形化管理(直觀、適合中小項目)

  1. 登入 phpMyAdmin → 右側「權限」標籤
  2. 點擊「添加新用戶」
  3. 填寫:用戶名、主機(本地/任意主機/%)、密碼(可生成隨機)
  4. 「為用戶創建的數據庫」勾選「授予所有權限」或自定義
  5. 「全局權限」保持默認不勾選(除超級管理員)
  6. 點擊「執行」創建
  7. 後續調整:權限列表中點擊用戶名「編輯權限」→ 具體庫/表/列級授權

phpMyAdmin創建數據庫

創建成功提示

權限標籤頁

添加新用戶頁面

用戶詳情填寫

創建成功返回

後續權限調整

選擇數據庫授權

具體權限勾選

權限項完整速查表

分類權限說明
數據操作 (DML)SELECT讀取數據
INSERT插入/替換數據
UPDATE修改數據
DELETE刪除數據
FILELOAD DATA INFILE / SELECT INTO OUTFILE
結構操作 (DDL)CREATE創建庫/表/索引
ALTER修改表結構
INDEX創建/刪除索引
DROP刪除庫/表/視圖
CREATE TEMPORARY TABLES創建臨時表
CREATE VIEW創建視圖
SHOW VIEW查看視圖定義
CREATE ROUTINE創建存儲過程/函數
ALTER ROUTINE修改/刪除存儲過程
EXECUTE執行存儲過程
管理權限GRANT OPTION授權/撤銷權限(不含 RELOAD)
SUPER超級權限:KILL 線程、SET GLOBAL、CHANGE MASTER、PURGE BINLOG 等
PROCESS查看完整進程列表(SHOW FULL PROCESSLIST)
RELOADFLUSH PRIVILEGES/LOGS/TABLES/HOSTS 等
SHUTDOWN關閉服務器
SHOW DATABASES查看所有庫列表
LOCK TABLES顯式鎖表
REPLICATION CLIENT查看主從狀態(SHOW MASTER/SLAVE STATUS)
REPLICATION SLAVE從庫連接主庫讀取 Binlog
CREATE USER創建/刪除/重命名用戶

最佳實踐原則

  1. 最小權限:應用賬號僅授予業務必需庫表的 SELECT/INSERT/UPDATE/DELETE
  2. 分離讀寫:只讀賬號給從庫/只讀實例,讀寫賬號給主庫
  3. 禁用 root 遠程:Host='localhost' 或具體應用服務器 IP
  4. 定期審計:SELECT User, Host FROM mysql.user; 檢查殭屍賬號、過度授權
  5. 密碼策略:validate_password 強制複雜度、過期輪換
  6. 避免通配符主機:% 僅用於受信任內網段,生產外網嚴禁
  7. 8.0 角色體系:CREATE ROLE/GRANT TO ROLE/SET DEFAULT ROLE 統一管理權限集

掌握三種管理方式,以 GRANT 為主、phpMyAdmin 輔、直操作表為應急/遷移,構建清晰、可審計、最小權限的資料庫安全防線。

copyright © 萬盛學電腦網 all rights reserved