萬盛學電腦網

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

MySQL 建立不同權限用戶完整指南:從超級管理員到受限帳號

MySQL 權限系統採用「主機+用戶」雙維度,配合 GRANT 精細控制庫、表、欄位級權限。本文提供三類典型帳號建立範本,涵蓋超級管理員、本地唯讀、特定 IP+特定庫,掌握模式即可靈活組合。

核心語法

GRANT 權限列表 ON 資料庫.表 TO '用戶'@'主機' IDENTIFIED BY '密碼';
FLUSH PRIVILEGES;

三大典型場景

1. 超級管理員(相當 root):全庫全表全權限 + 任意主機登入

-- 必須建立兩條:% 匹配遠程,localhost 匹配本地 socket
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON *.* TO 'reson1'@'%' IDENTIFIED BY '123456';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON *.* TO 'reson1'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

說明: *.* 表示所有庫所有表;% 通配所有 IP;localhost 走 Unix socket,兩者缺一不可。

2. 本地唯讀/讀寫帳號:僅允許本機連線

GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO 'reson2'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

適用於本機腳本、備份工具、監控腳本。

3. 受限帳號:特定 IP + 特定庫 + 僅增刪改查

GRANT SELECT,INSERT,UPDATE,DELETE ON dat1.* TO 'reson3'@'192.168.1.100' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

適用於應用伺服器固定 IP、最小權限原則。

進階權限組合速查

需求GRANT 子句
僅查詢GRANT SELECT ON db.* TO 'u'@'h'
查詢+鎖表GRANT SELECT,LOCK TABLES ON db.* TO 'u'@'h'
建表/改結構GRANT CREATE,ALTER,DROP ON db.* TO 'u'@'h'
建視圖/存儲過程GRANT CREATE VIEW,CREATE ROUTINE ON db.* TO 'u'@'h'
備份權限GRANT SELECT,LOCK TABLES,SHOW VIEW,RELOAD,PROCESS ON *.* TO 'backup'@'%'
複制從庫帳號GRANT REPLICATION SLAVE ON *.* TO 'rep'@'%' IDENTIFIED BY 'pwd'

常見坑點

  • 匿名用戶:DROP USER ''@'localhost'; 刪除安裝殘留的匿名帳號。
  • 密碼插件:MySQL 8.0 預設 caching_sha2_password,舊驅動需 ALTER USER 'u'@'h' IDENTIFIED WITH mysql_native_password BY 'pwd';。
  • 權限生效:FLUSH PRIVILEGES; 或重新連線。
  • 主機名解析:skip-name-resolve 開啟時僅比對 IP,避免 DNS 延遲。

遵循最小權限原則,按「業務角色 → 所需庫表 → 所需操作 → 允許來源 IP」四步建模,即可構建安全可控的 MySQL 存取體系。

copyright © 萬盛學電腦網 all rights reserved