数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,数据是信息系统中最核心的财产。数据库好比人的大脑,是所有信息系统的核心。一旦大脑受到破坏,势必会影响到整个人的身体机能。同样地,如果数据库中的数据丢失、破坏或泄漏,势必会给企业带来难以估量的损失。因此对数据库中数据的加密保护, 成为了数据库安全的重要内容。
一、什么是数据库加密?
数据库加密是指将存储于数据库中的数据,尤其是敏感数据,以加密的方式进行存储。本文所说的数据库加密都是指数据库透明加密。
二、什么是数据库透明加密?
数据库透明加密是指对库内数据的加密和解密,对数据库的访问程序是完全无感知的。特别是应用系统,不需要做任何修改和编译,就能够直接应用到加密库上。
与透明加密相对应的,是在应用系统中对数据进行加密,然后再存储到数据库中。需要真实数据的时候,从数据库中读取密文,再解密出明文。严格的说,这种方式并不是数据库加密,而是数据加密。
三、为什么要对数据库进行加密?
文章开头已经介绍了数据库和数据的重要性,所以对数据库进行加密是数据安全防护中最核心的手段之一。
数据类型分两种,一种是非结构化数据,比如文档和图片,另一种是结构化数据,比如数据库中的数据。这两种形态的数据都非常重要,都需要进行加密保护。而结构化数据,通常所承载的是非常集中且极有价值的信息,因而对其进行加密保护尤为重要。
面对敏感数据频繁泄漏的严峻现实,虽然加解密过程将损害数据库的使用效率,但对数据库进行加密仍是不得不为的必要防护措施。数据库加密能够显著提升数据库的安全性。加密后,数据以密文的方式存储,防止了数据直接暴露,同时增强对加密数据的访问控制,大大降低了数据被泄漏和恶意破坏的风险。
四、数据库加密有哪些实现方式,特性如何?
数据库加密的实现方式共有六种,具体介绍如下:
全盘加密:采用全盘加密系统或者存储加密网关系统,将数据库文件所在的磁盘扇区进行加密。当数据库访问磁盘扇区的时候,对加密扇区再进行解密。这种方式对于数据库自身来说是透明的,数据库管理系统也感觉不到加密解密过程的存在。这种加密方式工作在存储层,仅能防止磁盘丢失时敏感数据遭受泄漏。所有对磁盘具有访问权限的用户都可以访问到真实的数据库文件。因而,对于控制了操作系统的攻击者来说,并没有防护能力。
文件加密:在操作系统文件驱动层将数据库的存储文件经过加密后存储到磁盘上。当数据库访问存储文件的时候,再进行解密。这种方式对于数据库自身来说也是透明的,数据库管理系统也感觉不到加密解密过程的存在。这种加密方式能防止磁盘丢失和文件被复制导致的敏感数据泄漏。但是,对于控制了数据库系统的攻击者来说,文件还是开放的,因而也没有真正的防护能力。
数据库自带加密:某些数据库自身提供了加密机制,在数据库内核实现了存储的加密。这种加密方式能防止磁盘丢失和文件被复制导致的敏感数据泄漏。但是,对于控制了数据库系统的攻击者来说却是开放的,并没有防护能力。而且其密钥管理通常不会对数据库用户开放,安全性得不到保证,也得不到国内相关评测机构的认可。
库内扩展加密:通过使用视图、触发器、扩展索引等机制,实现透明加密。由于引入了独立于数据库的第三方程序,通过控制加密解密的权限,增加了额外的访问控制。对于数据库内不同的用户,也可以控制其对加密数据的访问。但是这种加密方式不能越过应用系统,实现应用系统用户对敏感数据的访问控制。而且这种加密方式依赖于数据库系统的扩展索引机制,并不能在所有数据库上实现。
数据库加密网关或加密驱动:通过对数据库前端部署数据库加密网关,或者通过扩展数据库访问驱动(如JDBC驱动)实现数据库加密。这种方式理论上能够支持所有的数据库,是一种通用的解决方案,且安全性更高。但是对于所有访问语句和访问机制却难以全部支持,例如对于网关之后的存储过程和触发器都无法支持。
应用加密网关:在应用系统之前放置加密网关,进一步将数据加密的位置提前,在数据进入应用系统之前进行加密。这种加密方式可以控制应用系统的用户对数据的访问权限,并且真实数据对所有数据库用户都是不可见的,是最安全的一种加密方式。事实上,这种加密方式与具体的数据库无关,是对立与数据库的。但是由于应用系统的复杂性,实现的难度也较大。
总之,数据被加密的位置离用户越近,安全性越高,同时实现的难度也越大。以上所述的几种加密方式,数据加密的位置离用户是逐步靠近的,防护能力也是逐步提升的。
目前国内数据库安全市场主流的数据库加密方式是库内扩展加密,本文中,如果没有特别指出,都特指这种加密方式。
有关数据库透明加密的其他相关问题,会在后续文章中一一介绍,敬请关注。