1. 程式人生 > 其它 >Ubuntu 17.04 編譯安裝 Nginx 1.9.9

Ubuntu 17.04 編譯安裝 Nginx 1.9.9

Netkiller Architect 手札

Multi-dimension Architecture Design & Implementation / Full Stack Architect

Mr. Neo Chan, 陳景峰(BG7NYT)

4.20. 資料加密

資料庫中有很多敏感欄位,不允許隨意檢視,例如開發人員,運維人員,甚至DBA資料庫管理員。另外加密主要是防止被黑客脫庫(盜走)

敏感資料加密有很多辦法,可以用資料庫內部加密函式,也可以在外部處理後寫入資料庫。加密演算法有很多種,但通常兩類比較常用,一種是通過key加密解密,另一種是通過證書加密解密。

通常程式設計師負責寫程式,程式交給運維配置,運維將key設定好,運維不能有資料庫許可權,DBA只能登陸資料庫,沒有key許可權。

4.20.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>			

4.20.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的人不應該用資料庫許可權。