Home | 簡體中文 | 繁體中文 | 雜文 | 打賞(Donations) | ITEYE 博客 | OSChina 博客 | Facebook | Linkedin | 知乎專欄 | Search | Email

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的人不應該用資料庫權限。