database-theory-8
数据库保护
计算机系统的安全性
- 计算机系统的安全性是指为计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件和数据,防止其因偶然或恶意的原因使系统遭到破坏,数据遭到更改或泄漏等。
- 计算机系统安全问题的分类:
- 技术安全类: 技术安全是指计算机系统中采用具有一定安全性的硬件、软件来实现对计算机系统及其所存数据的安全保护,当计算机受到有意的或无意的攻击时仍能保证系统的正常运行,保证系统内的数据不增加、不丢失、不泄露。
- 管理安全类: 技术安全之外的,诸如软硬件意外故障、场地的意外事故、管理不善导致的计算机设备和数据介质的物理破坏、丢失等安全问题视为管理安全。
- 政策法律类: 指政府部门建立的有关计算机犯罪、数据安全保密的法律道德准则和政策法规、法令。
数据库安全性控制
数据库安全性含义
- 数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄漏、更改和破坏。它包括两个方面的含义:
- 向授权用户提供可靠的信息服务
- 拒绝对数据的非授权存取访问请求,保证数据的可用性、完整性和一致性,进而保护数据库所有者和使用者的合法权益
数据库安全性控制
用户标识与鉴别
- 用户标识和认证是系统提供的最外层安全保护措施。
- 标识是指系统采用一定的方式标识其用户或应用程序的名字或身份。
- 认证是指系统在用户或应用程序登录时判断其是否为合法的授权用户。
- 常用的方法是采用用户名和口令。
自主存取控制
-
存取控制确保合法用户按照指定的权限使用DBMS和访问数据,而非法用户或不具有相关权限的用户则不能。
-
存取控制机制主要包括两个部分:
- 用户权限定义:将用户权限记录到数据字典中,形成安全规则或授权规则。
- 合法权限检查,每当用户发出数据库操作请求后,DBMS根据数据字典中的安全规则进行合法权限检查,决定是否接受用户的操作请求。
- 用户权限定义和合法权限检查机制一起组成了DBMS的安全子系统。
-
自主存取控制(discretionary access control,简称DAC)
- 用户对于不同的数据对象拥有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可以将其拥有的权限转授给其他用户。
- 根据预先定义的用户权限进行存取控制。用户权限是指用户对数据对象允许执行的操作类型,由数据对象和操作类型两个要素组成。
数据对象 | 操作类型 | |
---|---|---|
模式 | 模式、外模式、内模式 | 建立、修改、检索 |
数据 | 表、属性列 | 检索、插入、删除、修改 |
- 对于用户存取权限的定义称为授权。在授权中应指明:用户名,数据对象名,允许的操作类型。
用户和用户组
- 为了管理数据库特权的方便,数据库还支持角色和用户组的概念。
- 角色是一组权限的集合,可以把它授予用户或其他角色。当把某个角色授予用户(或角色)或从用户(或角色)处收回时,就同时授予或收回了该角色代表的全部权限。
- 用户组是一组具有相同特性用户的集合。在授权或收回权限时,可以以用户组为单位进行。
- 在SQL语言中,通过Grant语句为用户授予用户级权限或角色
1 | Grant <用户级权限>|<角色> [{,<用户级权限>|<角色>}] |
其中,public指数据库中的全部用户。With Grant Option则允许被授权的用户将指定的用户级权限或角色授予其他用户。
- 当要取消一个用户或角色的权限时,可以使用REVOKE语句将其收回
1 | Revoke <用户级权限>|<角色> [{,<用户级权限>|<角色>}] |
- 每一个用户都拥有自己定义的数据库对象如(基本表、视图等),除了他自己和拥有DBA权限的用户以外,其他用户都不能访问这些数据库对象。如果想和其他用户共享其中一部分数据库对象,就必须将这些数据库对象上的部分或全部权限授予其他用户。
1 | Grant ALL| <权限> [{,<权限>}] |
- 回收权限
1 | Revoke ALL|<表级权限> [{,<表级权限>}] |
强制存取方法
-
强制存取控制(mandatory access control,简称MAC)
- 每一个数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任一个对象,只有具有合法许可证的用户才可以存取。
-
在MAC中,DBMS所管理的全部实体被分为主体和客体两类。
-
主体是系统中的活动实体,既包括DBMS所管理的实际用户,也包括代表用户的各进程。
-
客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。
-
-
对于主体和客体,DBMS为他们每个实例指定一个敏感度标记(Label)。敏感度标记被分为若干级别,如绝密、机密、秘密、公开等。主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。
-
MAC机制通过对比主体的Label和客体的Label,最终确定主体是否能够存取客体。
-
当某一主体以某一许可证级别注册入系统时,系统要求他对任何客体的存取必须遵循如下规则:
-
仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体;
-
仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。
-
其它方法
- 视图机制:为不同的用户定义不同的视图,可以将用户对数据的访问限制在一定的范围内。
- 审计:把用户对数据库的所有操作都自动记录下来放入审计日志中。DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等;
- 数据加密:防止数据库中数据在存储和传输中失密。加密的基本思想是根据一定的算法将原始数据(明文)变换为不可识别的格式(密文),从而使得不知道解密算法的人无法获知数据的内容。
可信计算机系统评测标准
-
TCSEC(Trusted Computer System Evaluation Criteria)
- 1985年,美国国防部制定了可信计算机评估标准TCSEC
-
TDI/TCSEC
- 1991年4月,美国国家计算机安全中心NCSC发布《可信计算机系统评估标准关于数据库系统的解释TDI(Trusted Database Interpretation)》,将TCSEC扩展到数据库管理系统;
-
TDI与TCSEC从安全策略、责任、保证、文档四个方面描述了安全级别划分的指标。
数据库完整性控制
数据完整性含义
-
数据完整性是指数据的正确性和相容性。
- 正确性是指数据应具有合法的类型,并在有效的取值范围之内。
- 相容性是指表示同一个事实的两个数据应该相同。
-
数据库能否保持完整性关系到数据库系统是否能够真实的反映现实世界,因此维护数据库的完整性十分重要。
-
数据完整性控制是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出;
-
数据安全性控制是保护数据库防止恶意的破坏和非法存取;
-
安全性防范的是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。
完整性约束条件
-
施加在数据库数据之上的语义约束条件称为数据库完整性约束条件。数据库系统依据完整性约束条件进行完整性检查。
-
完整性约束条件作用的对象可以是列、元组、关系三种。
- 列约束主要是列的类型、取值范围、精度等约束条件;
- 元组约束是元组中各个字段间联系的约束;
- 关系约束是若干元组间、关系之间的联系的约束。
-
完整性约束可分为静态约束和动态约束。
-
静态约束是指数据库在每一确定状态数据对象所应满足的约束条件,它是反映数据库状态合理性的约束。
- 静态列级约束是对一个列的取值域的说明,包括对数据类型(包括数据类型、长度、单位、精度等) 、数据格式、取值范围或取值集合、空值等的约束。
- 静态元组约束规定了组成一个元组的各个列之间的约束关系。
- 静态关系约束规定了一个关系的若干元组或者若干关系之间常常存在的各种联系或约束。包括:实体完整性约束、参照完整性约束、函数依赖、统计约束等。
-
动态约束是指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束。
- 动态列级约束是修改列定义或列值时应满足的约束条件;
- 动态元组约束指修改元组值时元组中各个字段间需要满足的约束;
- 动态关系约束是加在关系变化前后状态上的限制条件。
-
完整性控制
-
数据库完整性控制应包括三个方面的功能:
- 定义功能,提供定义完整性约束条件的机制。
- 检查功能,检查用户发出的操作请求是否违背了完整性约束条件。
- 违约响应,若违背了完整性约束条件,则采取一定措施来保证数据的完整性。
-
完整性约束条件按照完整性检查的时机分为立即执行约束和延迟执行约束。
- 立即执行约束是指在执行用户事务的过程中,在一条语句执行完后立即进行完整性约束的检查。若违背了完整性约束,系统将拒绝该操作。
- 延迟执行约束是指在整个用户事务执行完毕后,再进行完整性约束的检查,结果正确方能提交。否则系统将拒绝整个事务。
-
一条完整性规则可以用一个五元组 ( D,O,A,C,P ) 来描述,其中:
- D ( Data ) 约束所作用的数据对象
- O ( Operation ) 触发完整性检查的数据库操作。
- A ( Assertion ) 数据对象必须满足的断言或语义约束。
- C ( Condition ) 选择A作用的数据对象值的谓词。
- P ( Procedure ) 违反完整性规则时触发的过程。
隐含约束的检查和违约响应
-
实体完整性和其他用DDL定义的约束
- Insert 或者Update时检查
- 违反,拒绝相应操作
-
参照完整性
- Insert、Update、Delete时检查
被参照表 | 参照表 | 违约处理 |
---|---|---|
可能破坏参照完整性 | 插入元组 | 拒绝 |
可能破坏参照完整性 | 修改外码值 | 拒绝 |
删除元组 | 可能破坏参照完整性 | 拒绝/级联删除/设为空值 |
修改主码值 | 可能破坏参照完整性 | 拒绝/级联更新/设为空值 |
-
用过程说明约束
- 把约束的说明和检验作为一个过程,由程序员编码到每个更新数据库的事务中。用以检验数据库更新是否违反了给定约束。使用这种方法,为程序员利用通用程序设计语言编制高效率完整性验证程序提供了有利条件。然而,这种方法也为程序员增加了负担。程序员必须清楚他所编码的事务所涉及的所有完整性约束,为每个约束编制一个验证过程。程序员的任何误解、遗漏,疏忽都将导致数据库不正确。同时,一旦完整性约束发生变化,应用程序就必须作相应的修改。
-
用断言说明约束
- 断言指数据库必须满足的逻辑条件,数据库完整性约束可以看成一系列断言的集合。使用这种方法DBMS需要提供断言说明语言,用以定义断言。并提供完整性验证子系统将其编译和存储到约束库,对于每个更新事务,完整性检查子系统利用约束库中的定义进行检查,判断是否违背了完整性约束。利用这种方法可以将约束集中在约束库中,免除了程序员在应用程序中分散定义和维护完整性约束的问题,减少了编程的麻烦,方便了应用程序和约束的维护。但其实现比较复杂,开销也大,降低了数据库更新的性能。
-
用触发器表示约束
- 所谓触发器就是一类事件驱动的特殊过程,一旦定义,当发生预定义的事件时,系统自动执行相应的触发器。定义触发器时,需要定义:触发器的触发条件以及触发器应当完成的操作。注意:断言表示数据库状态应当满足的条件,而触发器中的条件却是违反约束的条件,二者正好相反。
- Title: database-theory-8
- Author: Charles
- Created at : 2023-07-21 12:37:44
- Updated at : 2023-11-05 17:22:27
- Link: https://charles2530.github.io/2023/07/21/database-theory-8/
- License: This work is licensed under CC BY-NC-SA 4.0.