首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 資料庫安全配置實戰技巧(一):內部文件權限、啟動用戶、日志防洩露與授權表基線

     編輯:MySQL 資料庫相關知識

MySQL 跨平台特性導致預設配置偏向兼容性而非安全性,管理員必須從系統內部(文件權限、啟動用戶、日志)與外部網絡(授權表、權限最小化)兩維度進行加固。本文以 MySQL 3.23.49 為基準,給出生產環境可直接執行的基線配置清單。

一、系統內部安全

1. 數據目錄權限演進與標準

版本數據目錄權限風險
3.21.x775所有本地用戶可讀
3.22.x770同組用戶可讀寫
3.23.x700僅啟動用戶可訪問 ✓

標準狀態(mysql 用戶運行):

drwx------ 4 mysql mysql 4096 var/
drwx------ 2 mysql mysql 4096 var/mysql/
-rw------- 1 mysql mysql 9148 var/mysql/user.frm
... 所有文件 600

修正命令:

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

2. 禁用 root 啟動 mysqld(強制要求)

3.23.15+ 預設拒絕 root 啟動。若必須用 root,需顯式 ./safe_mysqld --user=root &。root 運行將導致 LOAD DATA INFILE/SELECT ... INTO OUTFILE 擁有 root 文件系統權限,極度危險。

3. 日志文件與 Shell 歷史防洩露

  • 通用/更新日志記錄 GRANT、SET PASSWORD 明文密碼。
  • 命令行帶密碼(mysqldump -uroot -ppass)會寫入 .bash_history。
  • MySQL 客戶端交互命令寫入 .mysql_history。

徹底禁用歷史記錄:

rm .bash_history .mysql_history
ln -s /dev/null .bash_history
ln -s /dev/null .mysql_history

操作時使用 -p 留空交互輸入密碼。

二、外部網絡安全:授權表基線配置

1. 預設 user 表差異

平台預設記錄風險點
Unixroot@localhost、root@hostname、匿名@localhost、匿名@hostnameroot 空密碼、僅本機連接
Windowsroot@localhost、root@%、匿名@localhost、匿名@%root 空密碼、% 允許任意主機、匿名@localhost 擁有全權限!

2. 必執行加固 SQL

-- 1. 修改 root 密碼(三種方式擇一)
mysqladmin -u root password 'StrongPass#2024'
-- 或
SET PASSWORD FOR root@localhost = PASSWORD('StrongPass#2024');
-- 或
UPDATE user SET Password=PASSWORD('StrongPass#2024') WHERE User='root'; FLUSH PRIVILEGES;

-- 2. 刪除匿名用戶
DELETE FROM user WHERE User=''; FLUSH PRIVILEGES;

-- 3. Windows 必須:刪除 Host='%' 記錄
DELETE FROM user WHERE Host='%'; FLUSH PRIVILEGES;

-- 4. 刪除測試庫權限(可選)
DELETE FROM db WHERE Db='test' OR Db LIKE 'test_%'; FLUSH PRIVILEGES;

3. user 表結構與權限速查

17 個權限列(Select_priv...Alter_priv),均為 ENUM('N','Y') 預設 N。關鍵管理權限:File_priv、Grant_priv、Process_priv、Reload_priv、Shutdown_priv —— 僅限 DBA。

4. GRANT/REVOKE 管理建議

  • 3.22.11+ 強制使用 GRANT/REVOKE,避免手動操作授權表。
  • 日常應用帳號:僅授予特定庫 SELECT/INSERT/UPDATE/DELETE。
  • 禁止授予 mysql 系統庫任何權限(等同全局 GRANT)。
  • 定期審計:SELECT User, Host FROM user WHERE Grant_priv='Y';

建立配置基線腳本,納入 CI/CD 與定期巡檢,確保 MySQL 始終處於加固狀態。

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