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

MySQL 資料庫安全硬化全方案:檔案權限、網路存取控制、授權表機制與防注入編程規範

     編輯:MySQL 資料庫相關知識

一、系統層面安全

1. 資料目錄權限 (核心)

# 僅 mysql 用戶可讀寫
chown -R mysql:mysql /usr/local/mysql/var
chmod -R go-rwx /usr/local/mysql/var
# 確認結果
ls -l /usr/local/mysql/var/
# drwx------ mysql mysql ...
# -rw------- mysql mysql ... *.MYD *.MYI *.frm
  • 舊版 (3.21/3.22) 預設 775/770 極度危險,必須手動收斂。

2. 禁止 Root 啟動 mysqld

# 正確啟動
mysqld_safe --user=mysql &
# 強制 root 啟動 (極度不建議)
mysqld_safe --user=root &
  • Root 啟動導致 LOAD DATA INFILE/SELECT ... INTO OUTFILE 擁有 Root 權限,可讀寫系統敏感檔案。

3. 歷史指令防洩漏

# 避免密碼寫入 .bash_history/.mysql_history
mysql -u root -p   # 互動式輸入密碼
mysqldump -u root -p db > backup.sql

# 徹底禁用歷史記錄
rm -f ~/.bash_history ~/.mysql_history
ln -s /dev/null ~/.bash_history
ln -s /dev/null ~/.mysql_history

4. 啟動參數安全強化

二、網路與授權安全

1. 初始 user 表清理

-- 刪除匿名用戶
DELETE FROM mysql.user WHERE User='';
-- 移除 Host='%' 的 root
DELETE FROM mysql.user WHERE Host='%' AND User='root';
-- 設定 root 強密碼
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('StrongPass!23');
FLUSH PRIVILEGES;

2. 授權表機制 (五表聯動)

  • user:全域權限 (超級用戶),嚴禁授予應用帳號。
  • db:資料庫級權限,主力授權層。
  • host:輔助 db 控制主機存取 (不受 GRANT 影響)。
  • tables_priv:資料表級權限 (SET 型態)。
  • columns_priv:欄位級權限 (SET 型態)。

3. GRANT/REVOKE 最佳實踐

-- 應用帳號:最小權限
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app'@'10.0.1.%' IDENTIFIED BY 'Pass!23';
-- 唯讀報表帳號
GRANT SELECT ON app_db.* TO 'report'@'10.0.2.%' IDENTIFIED BY 'Pass!23';
-- 撤銷
REVOKE INSERT ON app_db.* FROM 'app'@'10.0.1.%';
-- 刪除用戶
DROP USER 'app'@'10.0.1.%';

三、應用層防注入編程規範

參數作用建議
--skip-networking禁用 TCP/IP,僅本地 Socket單機應用**強烈推薦**
--skip-show-database隱藏 SHOW DATABASES啟用
--chroot=/path限制檔案存取於 chroot 目錄需配合 tmpdir/socket 路徑
--log-slow-queries[=file]記錄慢查詢啟用,配合 long_query_time

鐵律:永遠不要相信使用者輸入,數值欄位也要用參數化 (WHERE id=?),拼接 SQL 絕對禁止。

四、進階技巧

  1. 忘記 Root 密碼:mysqld_safe --skip-grant-tables & → 更新密碼 → 重啟。
  2. 慢查詢分析:--log-slow-queries + mysqldumpslow / pt-query-digest。
  3. 審計:MariaDB Audit Plugin / MySQL Enterprise Audit 記錄所有 DDL/DML/登入。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
語言/框架核心防禦關鍵 API
通用 Web單引號/雙引號測試、長度檢查、最小權限連線-
PHP預處理語句、關閉 magic_quotesPDO::prepare(), mysqli_prepare()
Java JDBCPreparedStatementconn.prepareStatement()
Perl DBIquote() / placeholders$dbh->quote(), $sth->execute(@params)
C APImysql_stmt_prepare()MYSQL_STMT