在人类社会的发展中,数据是一种极为重要的资源。作为计算机学科的一项重要技术,数据库的安全问题从未离开人们的视野,一直引起研究人员、开发人员、管理人员和客户的普遍关注。自1970年E. F. Codd提出关系数据模型开始,解决数据库各种安全问题的模型、方案、策略、原型系统、产品不断问世演化,实际上已经形成了一个重要而独特的安全领域——它既属于信息安全,又区别于传统的信息安全概念;既与数据库密切有关,又与传统数据库研究问题不同——数据库安全。
数据库安全问题的研究始于20世纪70年代。当时,IBM Almaden研究中心的System R项目重点研究了关系数据库系统的访问控制。在此期间,人们逐渐形成并认可了多级安全数据库的概念。1982年美国空军的暑期研讨班的召开促进了多级安全数据库系统的研制,启动了SeaView、LDV等一系列早期探索式原型系统,研究结果为后来的Oracle、Sybase、Informix等多级安全数据库产品广为借鉴采用。
20世纪80年代中期以后,人们发现数据库安全不仅仅是访问控制问题,还存在传统技术无法单独解决的一类新安全问题:推理通道。与此同时,计算机其他领域的研究应用不断蓬勃发展,推动人们逐步扩展数据库安全的外延与内涵,例如,与面向对象技术、Web技术、多媒体技术、网格技术、peer-to-peer技术、数据挖掘技术、无线通信技术等的融合。在与新技术、新应用密切结合的过程中,数据库安全也摆脱了数据库系统的单一局限,呈现出更为宽广的含义,涵盖了信息安全、数据服务质量等多个要素。
数据库安全发展演化的历程反映了人们发现问题、解决问题的过程,形成数据库安全原理与应用的主要线索,包括数据库安全的语义、访问控制、安全策略、多级安全数据库管理系统的设计与实现、推理通道的检测和消除、数据挖掘安全、隐私保护、数据库应用系统安全、SQL注入攻击、数据库木马、数据品质、加密查询、数据资产版权、数据库可存活性等内容。
数据库安全语义是在处理具体数据库安全问题时必须澄清的一个事项。不同背景的人们往往看到不同层次、不同深度的问题。如果无法准确了解数据库安全语义,那么在解决数据库安全问题时很有可能陷入盲人摸象的被动之中。
数据库安全,是指以保护数据库系统、数据库服务器和数据库中的数据、应用、存储,以及相关网络连接为目的,防止数据库系统机器数据泄露、遭到篡改或破坏的安全技术。
数据库安全技术将数据库作为核心保护对象,这与传统的网络安全防护体系不同。数据库安全技术更加注重从客户内部的角度进行安全防护。其内涵包括了保密性、完整性和可用性等安全属性。
1)保密性:不允许未经授权的用户存取信息。
2)完整性:只允许被授权的用户修改数据。
3)可用性:不应拒绝已授权用户对数据进行存取。
访问控制是数据库安全最早解决的问题之一。访问控制属于数据库安全的哪种语义?显然,访问控制是实现保密性的重要机制,也是实现完整性的机制。这时,人们对于数据库安全的理解又发生了转移和扩展。如果人们继续审视,可能还会发现,加密技术也是保密性的重要机制,可以加强数据库传输、数据库存储、数据库外包服务的安全性,加密过程可以采用XML加密标准,使用Java提供的安全对象……这样看来,数据库安全语义十分丰富。当我们用不同视角观察数据库安全问题时,会触及数据库安全语义的方方面面。
实际上,人们在发展安全技术的同时,也注意从系统工程、软件工程、质量工程、标准化等角度归纳数据库安全问题的共同特性,形成了丰富的安全语义。例如,国际标准化组织于1989年提出了OSI安全体系,定义了安全服务、安全机制、安全管理、安全威胁等内容。GB/T 9387.2定义了五大类安全防护措施。Web Services为Web应用集成和基于SOA的架构提出了16种左右的安全服务。拥有600多个遍及全球成员的OMG组织制定了一组适用于分布式对象的安全服务,提供了标准函数接口……因此,数据库安全的语义十分庞杂,我们非常有必要在这样一个共存交叉的知识概念中构造一个完整的体系,纲举目张地把握住数据库安全语义的实质内容。
当人们从正面理解数据库安全语义并实现安全保护功能的同时,攻击者始终在寻找数据库安全的漏洞,酝酿狡猾的数据库安全攻击模式,制造各种数据库安全威胁。在计算机领域,人们一开始的假设是“计算机用户是友好的”,可是现实告诉人们,这只是一种一厢情愿的想法,计算机用户并不都是友好的。因此,在21世纪,人们更加深入地研究、探讨了威胁问题。研究人员提出了各种威胁分析技术,Microsoft推出了威胁建模工具,软件开发过程开始引入攻击模式……可见,从负面效应分析数据库安全语义也是必要的,为我们诊断、处理、消除数据库安全隐患,提高数据库存活性奠定了基础。
最早的数据库安全研究是从访问控制模型开始的。数据库系统采用的访问控制模型不同于操作系统或文件系统的访问控制模型。首先,数据库系统的访问控制模型需要采用逻辑模型定义,授权操作的对象可以是关系、字段、元组,而关系、字段、元组本身符合关系数据模型的各种逻辑运算。其次,访问控制客体不是基于名称或引用的访问控制,而是基于内容的访问控制,控制决策与数据项的内容密切相关。因此,数据库的访问控制与SQL密切相关。
IBM的System R原型系统对于自主访问控制具有很大贡献,影响了后来不少的商业化数据库产品。这个原型系统提出并实现了分散授权管理、动态授权与撤销、采用视图实现基于内容的授权。这些机制甚至影响了SQL标准。在此基础上,人们还研究了肯定授权和否定授权、基于角色和任务的授权、临时授权和上下文敏感授权。
自主访问控制的缺陷是无法预期和控制权限的传播与扩散,因此,容易受到类似数据库木马的攻击。数据库木马是嵌入应用或者植入系统的恶意代码(例如存储过程),目的在于非法获取传递数据、控制或监控系统状态。高级的数据库木马可以利用隐蔽通道传递信息,不需要破坏系统现有的访问控制策略,巧妙通过系统锁、通信原语、异常、文件存在性、并发控制等机制构造一组表面上看起来合法的操作序列,将高安全等级数据传送到低等级用户。
强制访问策略起初应用于军事系统,通过主体、客体的安全分级,建立一种严格制定、不允许随意修改的读写规则,从而控制信息的保密性、完整性走向。这种机制后来被广泛应用于数据库系统,形成了多级安全数据库的基本模型,但强制访问控制引发了更多的隐蔽通道和推理通道。为了保持关系数据模型的基本特性,人们引入了多实例机制,即不同安全等级的实例中允许存在主码值相同的元组。
20世纪90年代后,人们开始关注基于角色的访问控制RBAC。研发RBAC的主要原因是降低传统访问控制模型管理的复杂性和高额费用。RBAC的核心概念是角色。一个角色具有特定的行为和责任,行使某个组织的特定功能。角色拥有一组访问控制权限,用户通过承担角色获取对应的权限。与现实世界一致,角色具有特定的层次结构,而管理角色成为RBAC特有的问题。为此,人们先后扩展了角色的继承、约束机制,并在此基础上将RBAC用于分布式访问控制,实现了分布式权限-角色指派、分布式用户-角色指派、分布式角色层次管理。
随着计算机技术的不断发展,访问控制问题在面向对象、XML技术中也凸显出来。人们开始在这些领域尝试寻找突破,然而,面向对象、XML和大部分应用并不具备关系数据模型的数学严密性,因此,访问控制问题在这些领域并没有一种通用而又精确的模型。
在实际的数据库系统应用中,安全策略需要考虑除保密性、完整性访问控制以外更多的问题。例如,如何描述、定义不同集团之间的利益冲突?如何控制不同客体之间的信息流动?尽管对于不同的需求可以采用不同的安全策略,但是,人们更希望在数据库及其应用系统中使用整合了多种安全策略的模型、模型架构,能够灵活配置安全策略,能够适用于不同的操作系统。随着组织的扩展、数据库应用系统的升级,人们还发现,对于相同的特定安全需求,组织与组织之间、部门与部门之间、部门与用户之间会存在大量莫衷一是的决策判断,衍生出部署分散、种类繁多、内容矛盾的安全策略。这样,人们必须保证在复杂的应用环境中协调各种安全策略,这种协调也成为数据库应用系统发展的重要内容。
安全策略语言是用来描述、定义不同层次安全策略的语言。高层安全策略抽象程度高,可以使用自然语言或者形式化语言。低层安全策略与具体安全机制密切相关,通常使用输入参数和函数调用的形式表述。与其他应用系统不同,数据库及其应用系统的安全策略广泛依赖于SQL,后者既是策略定义语言,又是策略执行语言。查询修改、查询优化成为数据库安全策略执行过程中独特的机制。