首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 用戶與權限管理精要:創建、授權、回收、刷新、刪除全流程

     編輯:MySQL 綜合教學

MySQL 用戶與權限管理精要:創建、授權、回收、刷新、刪除全流程

MySQL 默認 root 權限過大,生產環境應遵循最小權限原則,為每個應用創建專用賬號。本文梳理用戶全生命周期管理命令與核心原理。

核心命令速查表

操作命令說明
創建用戶CREATE USER 'user'@'host' IDENTIFIED BY 'pwd';MySQL 5.7.6+ 推薦語法
授予所有庫所有權限GRANT ALL PRIVILEGES ON *.* TO 'user'@'host' IDENTIFIED BY 'pwd';含 GRANT OPTION 需顯式 WITH GRANT OPTION
授予特定庫所有權限GRANT ALL PRIVILEGES ON db.* TO 'user'@'host' IDENTIFIED BY 'pwd';常用應用賬號模式
授予特定權限GRANT SELECT, UPDATE ON db.* TO 'user'@'host' IDENTIFIED BY 'pwd';最小權限原則
回收權限REVOKE ALL PRIVILEGES ON *.* FROM 'user'@'host';需精確匹配原授權的庫.表與 host
刷新權限生效FLUSH PRIVILEGES;修改 mysql 系統表後必執行
刪除用戶DROP USER 'user'@'host';MySQL 5.7.6+ 支持
查看用戶權限SHOW GRANTS FOR 'user'@'host';含密碼哈希(5.7+ 隱藏)
查看用戶列表SELECT User, Host FROM mysql.user;host 區分 localhost/%/IP

實戰場景演示

場景 1:創建應用讀寫賬號(僅操作 wordpress 庫)

CREATE USER 'wp_app'@'10.0.1.%' IDENTIFIED BY 'Str0ngP@ssw0rd';
GRANT SELECT, INSERT, UPDATE, DELETE ON wordpress.* TO 'wp_app'@'10.0.1.%';
FLUSH PRIVILEGES;

結果:該賬號只能從 10.0.1.0/24 網段訪問,僅見 wordpress 庫,無 DDL/DCL 權限。

場景 2:權限過大需收回重授

-- 1. 以 root 登錄
REVOKE ALL PRIVILEGES ON *.* FROM 'wp_app'@'10.0.1.%';
-- 2. 重新精確授權
GRANT SELECT, UPDATE ON wordpress.* TO 'wp_app'@'10.0.1.%' IDENTIFIED BY 'Str0ngP@ssw0rd';
FLUSH PRIVILEGES;

場景 3:只讀報表賬號

CREATE USER 'report_ro'@'%' IDENTIFIED BY 'ReadOnly2024!';
GRANT SELECT ON *.* TO 'report_ro'@'%';  -- 或限定特定庫
FLUSH PRIVILEGES;

核心原理深度解析

1. 用戶標識 = User + Host

'user'@'host' 組合唯一標識一個賬號。'user'@'localhost' 僅允許本機 Unix Socket 連接;'user'@'%' 允許任意 IP 連接;'user'@'10.0.1.%' 允許特定網段。**權限操作必須精確指定 Host**,否則會誤以為授權失敗(實則是另一條記錄)。

2. 權限層級體系

  • 全局級:*.*(管理權限、超級權限)
  • 庫級:db.*
  • 表級:db.table
  • 列級:GRANT SELECT (col1, col2) ON db.table TO ...

3. 權限生效機制

  • GRANT/REVOKE 修改 mysql.user、mysql.db、mysql.tables_priv 等系統表。
  • FLUSH PRIVILEGES 強制服務器重新讀取授權表到內存,新連接即時生效;已建連接不受影響(需斷開重連)。

安全最佳實踐

  1. 禁止 root 遠程登錄:DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1'); FLUSH PRIVILEGES;
  2. 強密碼策略:啟用 validate_password 插件,強制長度、複雜度、過期輪換。
  3. 網段白名單:Host 盡量縮小到應用服務器所在網段,禁用 %。
  4. 定期審計:SELECT User, Host FROM mysql.user WHERE User NOT IN ('mysql.sys','root'); 清理僵屍賬號。
  5. 最小權限:應用賬號僅授 SELECT/INSERT/UPDATE/DELETE,嚴禁 DROP/ALTER/GRANT。

權限管理是數據庫安全的第一道防線,熟練掌握上述命令與原理,構建纵深防御體系。

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