現在資訊行業對個資法/隱密資料很多都需要用到加解密存取技術,
而MariaDB有提供幾種加密方式,
MariaDB 10.1可作資料表/庫加密,
是使用類似於linux硬碟加密的方式進行.(有空在記錄)
而MariaDB 5.5則只有欄位加密,
方式還蠻多的,請參閱 Encryption, Hashing and Compression Functions
個人選擇之後,覺得des_encrypt/des_decrypt + des key file最方便開發管理且key的隱密性較高,
使用之前需要先啟用MaraiDB SSL/TLS,
再啟用服務時需指定--des-key-file參數,來指定金鑰檔,
金鑰檔的格是,如下
key_num_1 key_value_1
key_num_2 key_value_2
經過DES加密的字串長度變化,
new_len = orig_len + (8 - (orig_len % 8)) + 1
Example:
SELECT LENGTH(DES_ENCRYPT('kerker', 0)), LENGTH(DES_ENCRYPT('123456789', 0))
結果
LENGTH(DES_ENCRYPT('kerker', 0)) LENGTH(DES_ENCRYPT('123456789', 0))
9 17
6+(8-(6%8))+1=9 9+(8-(9%8))+1=17
使用上的眉角
des_encrypt(str, key_str) -(必須)-> des_decrypt(str, key_str)
des_encrypt(str, key_num) -(必須)-> des_decrypt(str)
就算key_num對應的key_str相同,
也不可以使用des_encrypt(str, key_num) --> des_decrypt(str, key_str)
另外一點,
des_encrypt(str, no_exist_key_num) --> des_decrypt(str) 照樣解的出來,
把資料複製到另一台使用不同的key file的instance,
則原instance 使用des_encrypt(str, no_exist_key_num) 加密的資料,
在另一台des_decrypt(str)居然也解的出來.
這邊我猜測加密時,找不到key_num時,會使用一把預設的key,這把key在所有instance都是存在且相同.
最好加密時使用明確key_num.
參考