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

MySQL 用戶權限管理完整指南:創建、授權、撤銷、刪除、密碼策略

     編輯:MySQL 綜合教學

MySQL 用戶權限管理完整指南:創建、授權、撤銷、刪除、密碼策略

MySQL 權限系統基於「用戶 = 用戶名 + 主機」模型,權限分層:全局、庫級、表級、列級、存儲過程級。本文匯總創建用戶、精細授權、撤銷權限、修改密碼、刪除用戶、查看權限、密碼複雜度策略的標準化操作手冊。

1. 創建用戶

CREATE USER 'username'@'host' IDENTIFIED BY 'password';
-- host: 'localhost' 本地、'10.0.%.%' IP 段、'%' 任意遠程
-- 密碼可為空 (不推薦)
CREATE USER 'app'@'10.0.%.%' IDENTIFIED BY 'Str0ngP@ss!';
CREATE USER 'readonly'@'%' IDENTIFIED BY 'ReadOnly#2024' REQUIRE SSL;

2. 授權 (GRANT)

-- 庫級讀寫
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `biz_db`.* TO 'app'@'10.0.%.%';

-- 唯讀
GRANT SELECT ON `biz_db`.* TO 'readonly'@'%';

-- 開發全權限 (含 GRANT OPTION)
GRANT ALL PRIVILEGES ON `dev_db`.* TO 'dev'@'10.0.%.%' WITH GRANT OPTION;

-- 列級權限 (極少用)
GRANT SELECT (id, name), UPDATE (name) ON `biz_db`.`user` TO 'masked'@'%';

-- 存儲過程權限
GRANT EXECUTE ON PROCEDURE `biz_db`.`sp_calc` TO 'app'@'10.0.%.%';

3. 撤銷權限 (REVOKE)

REVOKE DELETE ON `biz_db`.* FROM 'app'@'10.0.%.%';
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'dev'@'10.0.%.%';

-- 注意:授權粒度與撤銷粒度必須一致,否則不生效
-- GRANT SELECT ON db.tbl → REVOKE SELECT ON db.* 無效

4. 修改密碼

-- 5.7.6+ / 8.0
ALTER USER 'app'@'10.0.%.%' IDENTIFIED BY 'NewPass#2024';
-- 或
SET PASSWORD FOR 'app'@'10.0.%.%' = 'NewPass#2024';

-- 當前會話用戶修改自己密碼
SET PASSWORD = 'NewPass#2024';

5. 刪除用戶

DROP USER 'app'@'10.0.%.%';

6. 查看權限

SHOW GRANTS FOR 'app'@'10.0.%.%';
SHOW GRANTS;  -- 當前用戶

7. 密碼複雜度策略 (validate_password 組件)

-- 安裝 (8.0 內建組件)
INSTALL COMPONENT 'file://component_validate_password';

-- 關鍵參數
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;
SET GLOBAL validate_password.policy = STRONG;  -- LOW/MEDIUM/STRONG

-- 密碼過期策略
ALTER USER 'app'@'10.0.%.%' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'app'@'10.0.%.%' PASSWORD REQUIRE CURRENT; -- 修改密碼需驗證舊密碼

8. 常用權限速查表 (共 30+ 項)

權限層級說明
ALL PRIVILEGES全局/庫/表除 GRANT OPTION 外所有權限
SELECT/INSERT/UPDATE/DELETE庫/表/列四大 DML
CREATE/DROP/ALTER/INDEX庫/表DDL
CREATE VIEW/SHOW VIEW庫/表視圖
CREATE ROUTINE/ALTER ROUTINE/EXECUTE庫/過程存儲過程/函數
TRIGGER庫/表觸發器
REFERENCES庫/表/列外鍵引用
LOCK TABLES庫/表需配合 SELECT
RELOAD全局FLUSH 操作
SHUTDOWN全局關閉服務
PROCESS全局SHOW PROCESSLIST
FILE全局LOAD/SELECT INTO OUTFILE (高危)
SUPER全局KILL、CHANGE MASTER、SET GLOBAL 等 (高危)
REPLICATION CLIENT/SLAVE全局複製
CREATE USER全局建用戶/改密碼/重命名
GRANT OPTION全局/庫/表授權給他人
USAGE全局僅允許連接,無實質權限

9. 最小權限落地原則

  1. 業務賬號:僅授予具體庫表的 DML + EXECUTE,無 DDL、無管理權限。
  2. 只讀賬號:僅 SELECT,綁定讀副本 IP,強制 SSL。
  3. 遷移/備份賬號:SELECT + RELOAD + LOCK TABLES + REPLICATION CLIENT,臨時創建用完即刪。
  4. 定期審計:SELECT user, host FROM mysql.user WHERE authentication_string = '' OR user = ''; 排查空密碼/匿名用戶。
權限管理核心:最小權限、職責分離、定期審計、密碼強制輪換。MySQL 8.0 引入角色 (ROLE) 簡化批量授權:CREATE ROLE 'app_rw'; GRANT SELECT,INSERT ON db.* TO 'app_rw'; GRANT 'app_rw' TO 'user1'@'%';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved