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

MySQL 資料庫安全全攻略:帳號權限、SSL 加密、授權表與哈希存儲

     編輯:MySQL 資料庫相關知識

網絡時代的資料庫安全挑戰

隨著網絡應用普及,資料經網絡傳輸面臨竊聽、竄改風險,MySQL 提供多層次安全機制,從帳號認證到傳輸加密、細粒度權限控制,構建纵深防禦體系。

帳號安全:三元組結構與分庫分密

MySQL 採用「用戶名/密碼/來源位置」三元組定義帳號,同一用戶可針對不同資料庫設定不同密碼,實現最小權限原則。例如:

GRANT SELECT ON db1.* TO 'abc'@'server1' IDENTIFIED BY 'pwd1';
GRANT SELECT ON db2.* TO 'abc'@'server1' IDENTIFIED BY 'pwd2';

若用戶嘗試跨庫訪問,密碼不匹配即被阻擋。

三層驗證機制

  • 登錄驗證:用戶名/密碼基本認證。
  • 授權檢查:登錄後驗證具體操作權限(如 DROP TABLE)。
  • 訪問控制:細至列級的布爾型權限(SELECT、INSERT、UPDATE、INDEX、ALTER、CREATE、GRANT、REFERENCES 等)。

高危管理權限(RELOAD、SHUTDOWN、PROCESS、FILE、SUPER)需極謹慎授予。

SSL 傳輸加密:防竊聽、防偽造

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');

哈希不可逆,即使資料外洩也難還原明文,是業界標準做法。

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