数据库中有很多敏感字段,不允许随意查看,例如开发人员,运维人员,甚至DBA数据库管理员。另外加密主要是防止被黑客脱库(盗走)
敏感数据加密有很多办法,可以用数据库内部加密函数,也可以在外部处理后写入数据库。加密算法有很多种,但通常两类比较常用,一种是通过key加密解密,另一种是通过证书加密解密。
通常程序员负责写程序,程序交给运维配置,运维将key设置好,运维不能有数据库权限,DBA只能登陆数据库,没有key权限。
这里介绍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>
加密数据入库
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的人不应该用数据库权限。
原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。