資料庫安全·資料加密
阿新 • • 發佈:2022-05-02
以下節選擇《Netkiller Architect 手札》
作者:netkiller
地址 http://www.netkiller.cn/architect/
接下來幾周的話題是資料庫安全。
5.8. 資料加密
資料庫中有很多敏感欄位,不允許隨意檢視,例如開發人員,運維人員,甚至DBA資料庫管理員。另外加密主要是防止被黑客脫庫(盜走)
敏感資料加密有很多辦法,可以用資料庫內部加密函式,也可以在外部處理後寫入資料庫。加密演算法有很多種,但通常兩類比較常用,一種是通過key加密解密,另一種是通過證書加密解密。
通常程式設計師負責寫程式,程式交給運維配置,運維將key設定好,運維不能有資料庫許可權,DBA只能登陸資料庫,沒有key許可權。
5.8.1. AES_ENCRYPT / AES_DECRYPT
這裡介紹AES加密與解密簡單用法
mysql> select AES_ENCRYPT('helloworld','key'); +---------------------------------+ | AES_ENCRYPT('helloworld','key') | +---------------------------------+ | | +---------------------------------+ 1 row in set (0.00 sec) mysql> select AES_DECRYPT(AES_ENCRYPT('helloworld','key'),'key'); +----------------------------------------------------+ | AES_DECRYPT(AES_ENCRYPT('helloworld','key'),'key') | +----------------------------------------------------+ | helloworld | +----------------------------------------------------+ 1 row in set (0.00 sec) mysql>
5.8.2. 加密欄位
加密資料入庫
CREATE TABLE `encryption` ( `mobile` VARBINARY(16) NOT NULL, `key` VARCHAR(32) NOT NULL ) ENGINE=InnoDB; INSERT INTO encryption(`mobile`,`key`)VALUES( AES_ENCRYPT('13691851789',md5('13691851789')), md5('13691851789')) select AES_DECRYPT(mobile,`key`), length(mobile) from encryption;
這裡方便演示將key 寫入了資料庫,實際應用key應該儲存在應用程式配置檔案中。通常能把獲得key的人不應該用資料庫許可權。