[database]mysql 如何防駭

 MySQL 資料庫的安全性非常重要,特別是你的應用需要全球打卡,涉及大量用戶數據。為了防止駭客攻擊,你可以從以下幾個層面加強防護:


1. 使用強密碼與最小權限原則

強密碼策略

確保 MySQL 帳戶使用強密碼,避免簡單密碼被破解:

ALTER USER 'youruser'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongP@ssw0rd!';

可透過 validate_password 外掛來強制執行:

INSTALL PLUGIN validate_password SONAME 'validate_password.so';
SET GLOBAL validate_password_policy = STRONG;

最小權限原則

不要讓應用程式帳戶擁有 ALL PRIVILEGES,只給必要的權限:

GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'appuser'@'%';

2. 限制 MySQL 連線與遠端存取

避免 MySQL 允許遠端連線

除非必要,不允許外部 IP 直接連線 MySQL,編輯 my.cnf

bind-address = 127.0.0.1

如果必須開放,則 限制特定 IP

CREATE USER 'appuser'@'your.server.ip' IDENTIFIED BY 'password';

3. 防 SQL Injection(SQL 注入攻擊)

使用 Prepared Statements

永遠不要在 SQL 查詢中拼接使用者輸入,應該使用 Prepared Statement

import 'package:mysql1/mysql1.dart';
void insertCheckIn(MySqlConnection conn, double latitude, double longitude) async {
await conn.query(
'INSERT INTO checkins (latitude, longitude, timestamp) VALUES (?, ?, ?)',
[latitude, longitude, DateTime.now().toUtc().toIso8601String()]
);
}

4. 開啟 MySQL 加密

強制加密連線

確保資料傳輸過程是加密的,修改 my.cnf

    require_secure_transport = ON

如果你的應用程式使用 MySQL 連線,請確保支援 SSL/TLS:

    ALTER USER 'appuser'@'%' REQUIRE SSL;

5. 記錄與監控異常行為

啟用 MySQL 日誌

開啟查詢日誌與錯誤日誌,確保異常行為可追蹤:

log_error = /var/log/mysql/error.log
general_log = 1
general_log_file = /var/log/mysql/general.log

也可以使用 Fail2Ban 來監控 MySQL 連線異常,防止暴力破解。


6. 定期更新與備份

確保 MySQL 是最新版本,避免已知漏洞。
每天自動備份(建議至少備份 7 天):

mysqldump -u root -p mydb > /backup/mysql_backup_$(date +%F).sql



留言

這個網誌中的熱門文章

SQL設定SQL Server最大連線數及查詢語句

[MS-SQL] 利用資料庫的 Database mail 功能發送郵件 - 3.Send mail test

[MS-SQL]一些抓取資料庫結構及述敍用的 SQL