现在大部分研究主要集中在数据库基础设施安全,也就是存储、管理和服务数据的引擎。但我们常常忘了,攻击者的目标是数据。事实上,企业应该更多地专注于保护数据,而不是担心数据库系统。
当你听到“数据库加密”时,你会想到什么?加密静态数据?也许你想到加密的数据库备份,或者对数据库的互联网连接。事实上,数据库加密包括所有这些因素。从安全性、成本和性能方面来看,数据库加密有一些不同的类型。
应用层加密
正如它的名字所暗示的,应用层加密是由使用数据库来存储信息的应用程序来执行。应用程序开发人员通常在发送数据到数据库之前,会利用第三方加密库来加密数据,当从数据库中读取数据时再进行解密。
这种加密方法有几个有点,数据和加密密钥不是存储在数据库,这样,平台或者数据库管理员都不能访问它们。此外,应用程序开发人员来决定加密的数据,以及细粒度的水平。
不过,这种方法也存在缺点:很难将应用层的加密调整用于传统应用程序;每个读取和写入操作(SQL查询)的数据库必须使用加密,这需要巨大的成本来开发和测试。此外,对于加密的数据,企业不能使用一些数据库功能,例如索引。由于加密输出是随机的,加密数据元素的排序也将是随机的。
最后,加密的数据通常是二进制格式,这意味着表格必须重构为接受二进制,而不是传统的文本、数据或货币数值。总之,应用层加密提供最高的安全性,同时需要付出最高的成本和部署时间。
本地数据库对象加密
所有主流关系型数据库供应商都会提供一种或者多种类型的加密,首先,我们称之为“本地数据库对象加密”,因为加密引擎位于数据库内部。加密属于数据库代码的一部分,你可以将其配置为保护特定的数据库对象(例如表格和模式)。密钥保存在数据库内部,在系统表格中,这样当重新启动时,它们也可以访问到数据库。
本地对象加密的优势是,它是完全自足的加密方法。这种方法对于媒体加密很有效,因为在复制到存储驱动器或磁带备份之前,数据已经被加密了。