網頁

2013年3月29日 星期五

MySQL 加解密

之前因為個資法上路的緣故,好不容易將系統內記錄個資欄位的資料去除。不過變化趕不上計劃。因為某些因素又不得不去修改回來。

基本上系統能做的防護,應該該做的也差不多了。

例如,
  1. 該主機僅限特定區域的電腦才能存取;區網的部份有切開,防火牆有做好相關設定
  2. 系統介面有做特定的 IP檢查
  3. 系統介面有做帳號的登入檢查機制
  4. 系統有做 injection 的相關防護
  5. 連線走 SSL 的加密連線措施
  6. 定期修補作業系統MySQL PHP

在資料的儲存方面還可以再加強。將敏感性的文字加以處理,經加密後再放在資料庫內會更加安全些。
 
研究了一下,MySQL Encryption and Compression Functions。使用 AES_DECRYPT() 與 AES_ENCRYPT() ,可以將要放的文字經自行定義後的 KEY值,經 AES演算法處理後再放在資料庫儲放,當然取出的方式也是要經 AES_DECRYPT() 處理後,才能完整呈現加密前的文字。只要是沒有取到程式內所記錄的 Key 值,直接觀看記錄的結果,它會是一連串的亂碼。

使用的方式很簡單,範例如下:

(1) 修改資料型態:
use a column with a VARBINARY or BLOB binary string data type

(2) 加密的方式:
INSERT INTO `table` (
`name` ,
`phone` ,
`address`
)
VALUES (
'TEST', '035742995', AES_ENCRYPT('要儲放聯絡地址文字','Your Key')
);

(3) 取出的方式:
SELECT *, AES_DECRYPT(address , 'Your Key') Decode_address  FROM `table` WHERE `name` = 'TEST';

沒有留言:

張貼留言