隨著網絡應用普及,資料經網絡傳輸面臨竊聽、竄改風險,MySQL 提供多層次安全機制,從帳號認證到傳輸加密、細粒度權限控制,構建纵深防禦體系。
MySQL 採用「用戶名/密碼/來源位置」三元組定義帳號,同一用戶可針對不同資料庫設定不同密碼,實現最小權限原則。例如:
GRANT SELECT ON db1.* TO 'abc'@'server1' IDENTIFIED BY 'pwd1';
GRANT SELECT ON db2.* TO 'abc'@'server1' IDENTIFIED BY 'pwd2';
若用戶嘗試跨庫訪問,密碼不匹配即被阻擋。
高危管理權限(RELOAD、SHUTDOWN、PROCESS、FILE、SUPER)需極謹慎授予。
MySQL 4.1+ 基於 OpenSSL 支援 SSL。啟用需編譯 `have_openssl` 或使用 Windows 版內建庫。透過 `REQUIRE SSL`、`REQUIRE X509`、`REQUIRE SUBJECT`、`REQUIRE ISSUER`、`REQUIRE CIPHER` 等選項,可強制加密連線、驗證客戶端憑證、指定加密套件:
GRANT ALL ON ssl_db.* TO 'abc'@'%' IDENTIFIED BY 'pwd' REQUIRE SSL;
GRANT ALL ON ssl_db.* TO 'abc'@'%' IDENTIFIED BY 'pwd' REQUIRE SUBJECT '/CN=client.example.com';
| 表名 | 功能 |
|---|---|
| user | 全局用戶權限與加密密碼,決定誰能連線 |
| host | 主機級權限,不依賴用戶,優先於 user 表匹配 |
| db | 資料庫級權限 |
| tables_priv | 資料表級權限 |
| columns_priv | 欄位級權限 |
直接操作授權表需謹慎,修改後必須執行 `FLUSH PRIVILEGES` 生效。
密碼、銀行卡號等敏感資訊不應明文存儲。MySQL 提供 `PASSWORD()`、`ENCRYPT()`、`MD5()`、`SHA1()` 四種哈希函數,其中 MD5 輸出固定 32 位十六進制,便於日誌追蹤與驗證:
INSERT INTO users (user, pass) VALUES ('user1', MD5('passWord1'));
SELECT * FROM users WHERE user='user1' AND pass=MD5('passWord1');
哈希不可逆,即使資料外洩也難還原明文,是業界標準做法。