萬盛學電腦網

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

MySQL 新建用戶與精細授權完整教程

資料庫安全的核心原則是「最小權限」。本文介紹 MySQL 8.0 兼容的用戶創建、授權與權限管理最佳實踐,避免直接使用 root 或過度授權帶來的風險。

標準化創建流程

步驟 1:創建用戶

-- 登錄 root
mysql -u root -p

-- 創建用戶(指定主機限制)
CREATE USER 'sun'@'localhost' IDENTIFIED BY 'sun123456';
-- 或允許特定 IP 範圍
CREATE USER 'sun'@'192.168.1.%' IDENTIFIED BY 'sun123456';

步驟 2:授予權限

-- 僅授予特定數據庫權限(推薦)
GRANT ALL PRIVILEGES ON `sun`.* TO 'sun'@'localhost';

-- 或授予特定權限
GRANT SELECT, INSERT, UPDATE, DELETE ON `sun`.* TO 'sun'@'localhost';

-- 刷新生效
FLUSH PRIVILEGES;

權限體系詳解

權限分類具體權限適用場景
數據操作SELECT, INSERT, UPDATE, DELETE應用賬號
結構變更CREATE, DROP, ALTER, INDEX開發/遷移賬號
管理權限GRANT OPTION, SUPER, SHUTDOWN, PROCESS, FILEDBA 專用
復制相關REPLICATION SLAVE, REPLICATION CLIENT從庫/監控賬號

常見授權模式

模式一:單庫全權限(典型應用賬號)

GRANT ALL PRIVILEGES ON `mydb`.* TO 'app_user'@'10.0.0.%' IDENTIFIED BY 'strong_pass';
FLUSH PRIVILEGES;

模式二:唯讀賬號(報表/分析)

GRANT SELECT ON `mydb`.* TO 'readonly'@'%' IDENTIFIED BY 'readonly_pass';
FLUSH PRIVILEGES;

模式三:跨主機同賬號

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'10.163.225.87' IDENTIFIED BY '123';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '123';
FLUSH PRIVILEGES;

MySQL 8.0 重要變更

  • GRANT 不再隱式創建用戶,必須先 CREATE USER
  • 密碼驗證插件預設為 caching_sha2_password,舊版客戶端需指定 mysql_native_password
  • 支援角色(CREATE ROLE、GRANT role TO user),便於批量權限管理

安全加固清單

  1. 移除匿名用戶:DROP USER ''@'localhost';
  2. 禁止 root 遠程登錄:DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');
  3. 刪除測試庫:DROP DATABASE test;
  4. 定期審計權限:SHOW GRANTS FOR 'user'@'host';
  5. 啟用密碼過期策略:ALTER USER 'user'@'host' PASSWORD EXPIRE INTERVAL 90 DAY;

故障排查:Field 'ssl_cipher' doesn't have a default value

舊版升級至 5.7+ 時可能遇到。解決方法:修改 my.cnf 放寬 SQL 模式:

sql_mode=NO_ENGINE_SUBSTITUTION

重啟服務後重試 FLUSH PRIVILEGES。

規範的用戶與權限管理是資料庫安全的第一道防線,建議將授權腳本納入版本控制,實現基礎設施即代碼。

copyright © 萬盛學電腦網 all rights reserved