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

MySQL 數據庫安全配置全指南(上):系統內部加固、文件權限、賬號權限與日誌防洩

     編輯:MySQL 綜合教學

安全配置兩大維度

  • 系統內部安全:文件系統權限、啟動用戶、授權表保護、日誌防洩
  • 外部網絡安全:防火牆、SSL/TLS、連接限制、注入防禦(下篇覆蓋)

目錄結構與文件權限基線

假設源碼安裝至 /usr/local/mysql,數據目錄 /usr/local/mysql/var,啟動用戶 mysql:

安全權限基線表

路徑擁有者:組權限說明
/usr/local/mysql/varmysql:mysql700 (drwx------)數據目錄:僅 mysql 用戶可讀寫執行
/usr/local/mysql/var/*mysql:mysql700各庫目錄
/usr/local/mysql/var/*/*.MYDmysql:mysql600 (-rw-------)數據文件
/usr/local/mysql/var/*/*.MYImysql:mysql600索引文件
/usr/local/mysql/var/*/*.frmmysql:mysql600表結構定義

一鍵修正命令


chown -R mysql:mysql /usr/local/mysql/var
chmod -R go-rwx /usr/local/mysql/var

歷史版本權限演進警示

  • 3.21.x:datadir 775 → 任意本地用戶可讀,極度危險
  • 3.22.x:datadir 770 → 同組用戶可讀寫,仍有風險
  • 3.23.x+:datadir 700 → 僅啟動用戶可訪問,基線安全

啟動用戶鐵律:禁止 root 啟動

  • 3.23.15+ 默認強制 --user=mysql,拒絕 root 啟動
  • 強制 root 啟動需 --user=root,極度危險:

-- root 啟動導致的災難性後果
LOAD DATA INFILE '/etc/passwd' INTO TABLE t;  -- 讀取系統敏感文件
SELECT '' INTO OUTFILE '/var/www/shell.php';  -- 寫 WebShell

MySQL 雖限制 LOAD DATA 僅能讀全局可讀文件、INTO OUTFILE 不覆蓋文件,但 root 權限下繞過手段極多。

日誌防洩:歷史文件與命令行密碼

Shell 歷史文件風險


# 危險操作:密碼明文入歷史
mysqldump -uroot -pSecret123 db > backup.sql
mysql -uroot -pSecret123

密碼寫入 ~/.bash_history、~/.mysql_history,被讀取即洩露。

防護措施


# 1. 交互式輸入密碼(推薦)
mysqldump -uroot -p db > backup.sql
# Enter password: ********

# 2. 配置文件 ~./my.cnf(僅限受信環境)
[client]
password = Secret123

# 3. 禁用歷史記錄(極簡環境)
rm -f ~/.bash_history ~/.mysql_history
ln -s /dev/null ~/.bash_history
ln -s /dev/null ~/.mysql_history

授權表核心保護原則

  1. user 表極敏感:除 root 外禁止任何用戶訪問 mysql.user 表
  2. 加密存儲:密碼經 PASSWORD() 哈希存儲,洩露後仍可離線破解,需強密碼策略
  3. 最小權限授予:應用賬號僅授必要庫表權限,拒絕 FILE/PROCESS/SUPER/SHUTDOWN
  4. 定期審計:SELECT User, Host, authentication_string FROM mysql.user;

密碼修改標準流程


# 1. 登錄
mysql -uroot -p

# 2. 修改(5.7.6+ 推薦)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass!2024';

# 或兼容舊版
UPDATE mysql.user SET authentication_string = PASSWORD('NewStrongPass!2024') WHERE User = 'root' AND Host = 'localhost';

# 3. 刷新生效
FLUSH PRIVILEGES;

相關延伸主題

  • MySQL 數據庫安全配置(下):網絡層防禦、SSL 配置、注入防禦
  • MySQL 23 項安全檢查清單
  • MySQL 權限體系深度解析
  • MySQL SSL/TLS 雙向認證配置實戰
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved