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

MySQL 初學者必知 23 條安全與操作守則:從連線加密到權限最小化

     編輯:MySQL 綜合教學

整理 MySQL 官方文檔與實戰經驗,提煉 23 條新手必遵守的安全與操作準則,涵蓋網路、認證、授權、注入防護、檔案權限、服務啟動參數等全方位。

網路與連線安全

  1. 跨非信任網路必須加密:使用 SSH 隧道或 SSL/TLS 保護傳輸。
  2. 修改 root 密碼三步走:mysql -u root → UPDATE mysql.user SET password=PASSWORD('newpwd') → FLUSH PRIVILEGES。
  3. 防範四大攻擊:竊聽、竄改、重放、拒絕服務;基於 ACL (Access Control List) 實施存取控制,支援 SSL。

帳號與權限最小化

  1. 僅 root 可存取 mysql.user 表,其他用戶禁止。
  2. 密碼加密儲存:user 表密碼若洩露,攻擊者可直接登入。
  3. 用 GRANT/REVOKE 管理權限,不直接操作授權表。
  4. 避免明文密碼:應用層用 MD5()/SHA1()/SHA2() 雜湊存儲。
  5. 拒絕弱密碼:不使用字典詞,強制複雜度策略。
  6. 防火牆隔離:資料庫置於防火牆後或 DMZ,封鎖非信任網段存取 3306 埠。
  7. 掃描驗證:nmap -p 3306 或 telnet host 3306 確認埠未對外暴露。

SQL 注入防護

  1. 參數化查詢 / 預處理語句:杜絕字串拼接 SQL。
  2. 輸入驗證與長度限制:拒絕過長、非預期字符。
  3. 應用使用低權限帳號:僅授予必要 CRUD 權限,無 DDL/管理權限。
  4. 各語言使用官方逃逸函數:PHP mysqli_real_escape_string、Java PreparedStatement 等。

系統層面加固

  1. 監聽封包稽核:tcpdump -i eth0 -w - src or dst port 3306 | strings 檢查明文傳輸。
  2. 以普通用戶啟動 mysqld,禁止 root 啟動。
  3. 禁用符號連結:啟動參數 --skip-symbolic-links。
  4. 資料目錄權限收斂:唯獨屬於啟動用戶。
  5. 嚴控高危權限:PROCESS/SUPER/FILE 僅授予管理員。
  6. DNS 信任風險:授權表僅用 IP/通配符,避免主機名解析劫持。
  7. 限制單帳號連線數:max_user_connections 變數或 GRANT ... WITH MAX_CONNECTIONS_PER_HOUR。
  8. 資源控制選項:GRANT 支援 MAX_QUERIES_PER_HOUR、MAX_UPDATES_PER_HOUR 等。

服務啟動安全開關

  1. --local-infile=0 禁用 LOAD DATA LOCAL。
  2. --skip-grant-tables 僅限緊急救援,用畢即關(mysqladmin flush-privileges 恢復)。
  3. --skip-show-databases 隱藏資料庫列表。

緊急重置 root 密碼(Error 1045)

  1. mysqld --skip-grant-tables &
  2. mysql -u root mysql
  3. UPDATE user SET password=PASSWORD('newpwd') WHERE user='root';
  4. FLUSH PRIVILEGES;
  5. 正常重啟服務。

將此清單印出貼在工位,每次部署、代碼審查、上線前逐項核對,養成安全肌肉記憶。

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