【梳理】数据库系统概论 第4章 数据库安全性 4.1 数据库安全性概述 4.2 数据库安全性控制 4.3 视图机制
教材:王珊 萨师煊 编著 数据库系统概论(第5版) 高等教育出版社
注:文档高清截图在后
第4章 数据库安全性
4.1 数据库安全性概述
1、数据库的安全性是指:保护数据库,防止不合法的使用造成数据泄露、更改或毁坏。安全性问题不是数据库系统独有的,所有计算机系统都存在不安全因素。但数据库系统中,大量数据集中存放,且面向大量用户共享,所以安全问题尤为突出。系统安全保护措施是否有效是数据库系统的主要技术指标之一。
2、数据库的不安全因素主要有:
【1】非授权用户对数据库的恶意存取与破坏。
【2】重要或敏感的数据被泄露。
【3】整个安全环境的脆弱性。
数据库安全与计算机系统的安全,包括硬件、操作系统、网络等的安全性是紧密联系的。
3、计算机以及信息安全技术方面有众多安全标准,最有影响的主要由TCSEC和CC。
TCSEC是指1985年美国国防部(Department of Defense,DoD)颁布的《DoD可信计算机系统评估准则》(Trusted Computer System Evaluation Criteria,TCESC或DoD85)。在TCSEC推出后的10年里,众多国家和地区都以此为概念基础建立了各自的评估标准。但标准的碎片化会极大增加整个IT行业的运行成本,于是1993年起各标准的发起组织联合解决了各自标准中的概念与技术上的差异,将各自的准则集合成了一组较单一的、能广泛应用的IT安全准则,称为通用准则(Common Criteria,CC)。1999年,CC被ISO正式采用为国际标准,2001年我国将其采用为国家标准。
目前CC基本取代了TCSEC,成为评估信息产品安全性的主要标准。
4、TCSEC又称橙皮书。1991年4月美国国家计算机安全中心(National Computer Security Center,NCSC)颁布《可信计算机系统评估准则关于可信数据库系统的解释》(TCSEC/Trusted Database Interpretation,TCSEC/TDI,紫皮书),将TCSEC扩展到数据库管理系统。该解释定义了数据库管理系统的设计与实现中需要满足和用以进行安全性级别评估的标准,从4个方面描述安全性级别划分的指标,即安全策略、责任、保证和文档,每个方面又细分为若干项。
TCSEC/TDI将系统划分为4组7个等级,依次是D、C(C1、C2)、B(B1、B2、B3)、A(A1),可靠或可信程度逐渐增高。
D级是最低的安全级别,一切不符合更高标准的系统全部归与于D组。DOS是安全标准为D级的典例,它具有操作系统的基本功能,如文件系统、进程调度等,但在安全性方面几乎没有专门的机制来保障。
C1级的系统只提供非常初级的自主安全保护,能实现用户对数据的分离,进行自主存取控制(DAC),保护或限制权限的传播。
C2级是安全产品的最低等级,提供受控的存取保护。比较旧的Windows 2000和Oracle 7都属于C2级的产品,这类产品往往不在其名称中突出“安全”这一特色。
B1级系统对数据加以标记,并对标记的主题和课题实施强制存取控制(MAC)和审计(后续会解释)等安全机制,B1级以及更高级别的产品才被认为是真正意义上的安全产品。
5、CC根据系统对安全保证要求的支持情况提出了评估保证级,分为EAL1到EAL7共7个级别,安全性依次提高。TCSEC/TDI中的C1到A1级大致对应CC中的EAL2到EAL7级别。
4.2 数据库安全性控制
1、计算机系统中,安全措施是分级设置的。比如在常见的数据库安全模型中,用户请求进入计算机系统时,先对用户标识进行鉴定,只有合法的用户才允许进入计算机系统;对可以进入系统的用户,DBMS还要进行存取控制,只允许各个用户执行合法操作;操作系统也具有自己的保护措施;数据库中的数据通常是加密存储的。本章只讨论数据库安全的内容,操作系统的安全保护措施不再详述;而现实中的针对逼迫说出或诱骗口令、数据中心存储设备失窃等采取的安保措施,例如机房监控、物理加锁等,也不在讨论之列。
数据库管理系统不仅存放数据本身,还会额外存储一些安全相关的标记和信息,称为安全数据。
2、用户身份鉴别是数据库管理系统的最外层安保措施。每个用户在系统中都有唯一的标识,一般由用户名和用户标识码(UID)组成。UID在系统的生命周期内是唯一的。系统存储了所有合法用户的标识。每次用户要求进入系统时,系统会进行核对,通过系统鉴定后,系统才向用户提供数据库管理系统的相应权限。用户身份鉴别的方法有很多种,且一个系统中往往多种方法结合以获得更强的安全性:
【1】静态口令鉴别。
静态口令就是常说的密码,多由用户自行设定。身份鉴别时,只需输入正确的口令,用户就能被允许使用DBMS。除非进行修改,否则这些口令不主动变化。在实际应用中,用户常常用生日、手机号、简单而有规律的数字等内容作为口令,很容易通过密码字典等方法**。一旦被**,非法用户就可以冒充该用户使用数据库,有时会对用户本人和数据库都造成严重后果。弱口令容易被攻击,安全性较低。
DBMS可以通过DBA设定的规则保证口令的可靠。例如,限制口令至少要达到8个字符;要求口令同时包含数字、大小写字母、特殊符号;设定口令中数字、字母、特殊符号的最少个数;要求口令不能包含一些常见的单词;口令不允许与用户名或用户标识符相同;口令的有效期等。存储和传输过程中,应当使口令不可见,即以密文方式存储和传输。
【2】动态口令鉴别。
该方式安全性较高。这种方式的口令是动态变化的,每次鉴别时需要使用专门产生的新口令登录DBMS。短信验证码和QQ的手机令牌是常见的动态口令鉴别方式,每次进行身份鉴别时,用户都被要求获取新口令登录。
【3】生物特征鉴别。
这是一种通过生物特征验证身份的技术。生物特征是指生物体唯一具有的、可测量、可识别和可验证的稳定特性,如指纹、虹膜、掌纹,以及科幻作品中常常出现的视网膜特征。该方法使用方便,安全性较高。但是需要注意生物特征受到干扰和生物特征失窃等问题。比如:手湿时,手机的指纹识别传感器会识别出错误的指纹;记录指纹的手指受伤后指纹失效造成无法登录;使用照片、录像甚至定向干扰对人脸识别系统进行误导,以及神经网络伪造特定声纹等。
【4】智能卡鉴别。
智能卡是一种不可复制的硬件,内置IC,具有硬件加密功能。智能卡由用户随身携带,登录DBMS时插入专门的读卡器进行身份验证。从智能卡中读取的信息多是静态的,所以通过内存扫描和网络监听等技术仍然可能拦截到验证信息,存在一定安全隐患。我们常用的交通卡、学生卡、电话卡、身份证等都属于智能卡。
实际应用中,常常需要采取多种方式结合的形式来验证身份。例如:某企业位于某市的某机密性数据中心的DBMS在登录时需要验证动态口令、人脸、指纹、声纹,且动态口令由专门的便携式设备和需要访问数据库的具有授权的特定部门各自给出,还需要在摄像设备前按要求做出若干个随机的动作,并复述随机的语句或回答随机问题。全部验证通过后,才可以登录DBMS。
3、数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未授权人员无法接近数据。这主要通过数据库系统的存取控制机制实现。存取控制机制主要包括定义用户权限和合法权限检查两部分。
(1)定义用户权限,并将用户权限等级到数据字典中
用户对某个数据对象的操作权力称为权限。某个用户具有何种权限与其说是技术问题不如说是管理和政策问题。DBMS要保证这些决定的执行。为此,DBMS必须提供适当的语言来定义用户权限。这些定义经过编译后存储在数据字典中,被称为安全规则或授权规则。
(2)合法权限检查
用户发出存取请求后,DBMS查找数据字典,根据安全规则进行合法权限检查。若用户的操作请求超出合法范围,拒绝操作。
定义用户权限和合法权限检查这两个机制一起组成了DBMS的存取控制子系统。
4、存取控制分为自主存取控制(Discretionary Access Control,DAC)和强制存取控制(Mandatory Access Control,MAC)。自主存取控制方法中,用户对不同的数据库对象一般具有不同的存取权限,不同用户对同一对象一般也具有不同的存取权限。用户有时还可以将已有权限转授给其他用户。大型DBMS都支持自主存取控制。SQL的GRANT和REVOKE语句分别控制权限的授予和收回。由于各平台的SQL语法具有较大不同,接下来关于SQL语法的内容都不会详细地写入归纳梳理中,大家应根据平台的不同而采用对应的语法。后续我会补充一些练习题的题解(平台以SQL Server为主),读者可根据习题中的SQL语句来进行学习。
用户权限由两个要素组成:数据库对象和操作类型。定义一个用户对一个对象的存取权限,必须要定义这两个要素。定义权限称为授权(authorization)。关系数据库系统中,存取控制的对象不仅有数据本身,还有数据库模式(模式、基本表、视图、索引等)。
列权限包括SELECT、REFERENCES、INSERT、UPDATE等,含义与表权限类似。对列的UPDATE权限指对表中某一列的值可以修改。而且,即使拥有了这个权限,仍然需要遵守创建表时定义的主码等其它约束。列的INSERT权限指用户被允许插入元组。对插入的元组,授权用户可以插入指定值,其它列为空或默认值。主码的INSERT权限一定要被授予用户,否则该用户无法插入元组。在具体的实现中,比如通过某个GUI进行插入操作时,即使用户不能指定主码,在最终对数据库执行插入操作时也要用到主码的修改权限,主码可以由系统给出。没有对主码的修改权限,插入会被拒绝。
5、GRANT语句将指定对象的特定权限授予指定用户。发出该语句的可以是DBA也可以是该对象的创建者(owner),有时还可以是已经拥有该权限的用户。接受权限的用户可以是一人或多人,也可以是全体(PUBLIC)。
SQL标准不允许循环授权,即被授权者不能把权限再授予最开始的授权者。但SQL Server允许循环授权。
REVOKE语句收回已经授予的权限,由DBA或其他授权者发出该指令。大多时候,授予出的权利都应该及时收回。比如说,学生只可以在某个特定时间段进行选课。该时间段结束后,学校的数据库的授权人员将学生全体的修改选课数据的权限收回。
用户可以自主决定将数据的存取权限授予何人,决定是否允许被授权者将该权限继续授予其它人。这样的存取控制称为自主存取控制。生活中类似的例子有:教务处主任让某老师对学生正陆续上交的一批文件进行盖章,而该老师在一日下午临时因公出差,将章交给了班长帮忙盖印。
6、较高权限的数据库用户,比如DBA,有权为数据库创建新用户。但是创建用户的CREATE USER语句不是SQL标准,各个数据库产品实现相关功能的语句也相去甚远。这部分功能的实现请大家自行了解。
7、数据库角色是数据库中具有一类权限的集合的对象。可以为一组具有相同权限的用户创建一个角色,然后使用角色来批量管理这一批用户的数据库权限,简化授权过程。CREATE ROLE语句用于创建角色,GRANT和REVOKE对角色也适用。使用时,先创建角色,然后将该角色授予一定数量的用户。
8、自主存取控制(DAC)通过授权机制有效控制敏感数据的存取。但用户对数据的存取权限是自主的,所以用户可以自由决定将数据的存储权限和该权限的授权权限授予何人。在这种授权机制下,可能存在数据的“无意泄露”。例如:甲将某些数据的存取权限授予乙,初衷可能是仅允许乙本人修改这些数据。但仅含DAC机制时,甲的这个要求并不能得到保证,因为乙获得权限后可以立即将数据备份到自己的数据库中,就可以在不征得甲的同意的前提下传播副本。造成这个问题的根本原因在于DAC机制仅仅对数据的存取权限进行控制,而数据本身并无安全标记。
要解决这个问题,就需要对系统控制下的所有主客体实施强制存取控制(MAC)策略。该策略是指:为了保障更高的安全性,按TDI/TCSEC中安全策略的要求采取的强制存取检查手段。这不是用户能直接感知或控制的。MAC适用于对数据有严格而固定的密级分类的系统,如公安或部队的计算机系统。
MAC中,DBMS管理的全部实体分主体和客体两大类。主体是系统中的活动实体,包括DBMS管理的实际用户,也包含涉及用户的各个进程。客体是系统中的被动实体,受主体操纵,包括文件、基本表、索引、视图等。对每个实体,DBMS指派一个敏感度标记。
敏感度标记分为若干级别:绝密(Top Secret,TS)、机密(Secret,S)、可信(Confidential,C)、公开(Public,P)等。密级由高到低的次序为TS≥S≥C≥P。主体和客体的敏感度标记分别称为许可证级别(clearance level)、密级(classification level)。MAC机制通过对比主客体的敏感度标记,确定主体是否能存取客体。
某用户以特定标记注册后,系统要求它对任何客体的存取必须遵循如下规则:
【1】仅主体的许可证级别≥客体的密级时,主体方可读取相应客体。
【2】仅主体的许可证级别≤客体的密级时,主体方可写入相应客体。
规则【1】是显然的。至于为何确立规则【2】,一种解释是:按照此规则,用户可在写入数据后将数据赋予高于自己的许可证级别的密级。这样数据被写入后即使自己也无法再读取。如果不遵循规则【2】,就可能将数据密级从高流向低,造成泄密。例如:某TS密级的“内鬼”主体将TS密级的数据恶意降低为P,然后写入数据。如此一来,不但数据被恶意破坏,而且大家都可以读到数据的全部内容,绝密的数据就这样被公开。
事实上密级高的主体一般都不亲自去管理涉密数据。比如说:企业的CEO委派专门的员工来负责将商业机密写入数据库,CEO只能通过数据库看到这些高密级的数据而不能改变数据内容,也不能擅自降低密级。即使CEO希望修改数据,也无法在数据库中直接动作,而是需要通知责任人进行改动。再比如:学生的成绩只有教务秘书能修改,院长和校长只能查看学生的成绩而不能修改。即便要主张修改成绩,也不能在数据库直接操作,而是通过教务秘书进行修改。
MAC与DAC配合,令其余的低密级主体也不可以读写涉密数据。如果指派的低密级的责任主体蓄意破坏或泄露涉密数据,应追查直接作案者和相关负责人的责任(也就是说高层有机会甩锅)。为了防止非法主体擅自侵入并盗取、毁坏机密数据,其它方面也要做好把关,比如限制非法用户的访问。可见,规则【2】一定程度上限制了高密级(高权力)人员的失当决策造成的涉密数据的损毁,但是需要加强其它方面的措施来防止未授权的低密级主体读写数据。
MAC对数据本身进行密级标记,无论数据如何复制,标记都同时复制,与数据密不可分。符合密级要求的用户才可以操纵数据,提高了更高级别的安全性。较高安全级别的保护要包含较低级别的所有保护,因此实现MAC之前应当务必确保实现DAC。也就是说主体想要读写涉密数据时,首先需要通过DAC机制的检查(获得权限),通过以后再接受MAC机制的检查(密级匹配),只有两个检查都通过了,才被正式允许读写机密。
4.3 视图机制
1、为不同用户定义不同的视图,可以将数据对象的可见性限制在一定范围内。意即,通过视图机制把涉密数据对无权存取的用户隐藏,从而对数据提供一定的安全保护。