数据库防止篡改,可避免脏读的是
前段时间写了一篇《数据防篡改数据库防止篡改,这事差点难倒我了》,这是站在没有源代码或管理角度思考数据库防止篡改的数据防篡改方案,具有一定的可行性。但后来仔细一想,能不能站在软件研发的角度思考如何做?通过与软件开发工程师沟通,本人又有了新的想法,当然这新想法,不是什么新技术,只是对自己认知的扩展提升,顺便也分享给大家参考。
黑客攻击点对一个信息化系统,黑客直接攻击的通常有三个点。首先是网络数据截获或篡改,即在网络传输中截获数据,伪造后再发送到信息化系统,常规的防护手段就是网络证书,即https,采用pki非对称加密技术,保障网络数据传输的一致性。其次是应用程序攻击,利用程序的漏洞,包括代码漏洞、中间件漏洞、第三方工具漏洞等,修改或模拟应用程序对数据库进行操作,应用程序攻击防护涉及面比较广,技术层次也多,包括防火墙、waf、安全补丁、杀毒软件等都是防护手段工具。第三是数据库攻击,利用数据库漏洞或取得数据库账号权限,对数据库数据进行篡改,如何防护,是本文今天讨论的主题。
攻击点示意图
数据库数据防篡改加密技术方式由于关系型数据库存储的数据都是明文且逻辑性强,黑客攻击成功后,很容易对数据进行修改且大致能保持数据逻辑完整性,让用户不易察觉。常见的数据库数据防篡改加密有以下几种技术方式:
方式一:在信息化系统应用层对数据库数据加解密
在信息化系统应用层开发加解密模块,数据输入应用程序后,通过加解密模块,转换为密文后存入数据库的表中。此种方式好处是结构相对简单,加解密的秘钥存放在应用程序中,与业务逻辑紧密,灵活性好。缺点是数据库的数据都是密文,数据库的索引、查询、事务处理、触发控制等无法进行,所有这些处理都要放到应用程序端,造成应用程序技术复杂度高和工作量大。当然这种方式能完全杜绝直接在数据库修改数据或查询的安全事件。
方式二:网关式加解密
在应用层和数据库中间,建设数据库加解密网关,统一对数据库的读写进行加解密操作,数据在数据库还是密文存储。相对于方式一,此种方式应用的是第三方安全专业厂商的加解密网关产品,能大大减轻系统应用层的开发工作量和技术复杂度,但却又增加了对第三方厂商的依赖性。
方式三:透明加密
利用数据库软件自身的安全增强特性,在数据库引擎层,由数据库厂商提供透明数据加解密服务机制。此种方式的好处是对应用层、对数据接口都是透明的,数据的读写性能也是最好的,目前主流的商业数据库都支持这种模式,缺点是此种应用方式完全由数据库厂商设计提供,不能集成第三方秘钥系统等。
数据库数据防篡改,只要数据库的数据是密文的,秘钥不公开,基本就能防止非授权情况下的数据篡改。数据安全是相对的,没有绝对的安全,上述三种方式虽然能在数据库层面防止数据被篡改,但是攻破应用程序或知道秘钥,数据修改就非常简单,另外数据库存储的如果是密文,那数据库的性能损失和维护性差就是隐性代价。
本文暂不讨论非关系型数据库、键值数据库的防篡改加密,后续另行文。