安全性
数据库的不安全因素:
- 非授权用户对数据库的恶意存取和破坏:一些黑客(Hacker)和犯罪分子在用户存取数据库时猎取用户名和用户口令,然后假冒合法用户偷取、修改甚至破坏用户数据。
- 数据库中重要或敏感的数据被泄露:
- 黑客和敌对分子千方百计盜窃数据库中的重要数据,一些机密 信 息被暴露。
- 数据库管理系统提供的主要技术有强制存取控制、数
据加密存储和加密传输等。 - 审计日志分析
- 安全环境的脆弱性
- 数据库的安全性与计算机系统的安全性紧密联系
- 计算机硬件、操作系统、网络系统等的安全性
- 建立一套可信 (Trusted)计算机系统的概念和标准
安全标准
安全性两个标准
TCSEC标准:
通用准则:CC标准
计算机系统中,安全措施是一级一级层层设置
- 系统根据用户标识鉴定用户身份,合法用户才准许进入计算机系统
- 数据库管理系统进行存取控制,只允许用户执行合法操作
- 操作系统有自己的保护措施
- 数据以密码形式存储到数据库中
数据库安全性控制的常用方法
- 用户身份鉴别
- 存取控制
- 视图
- 审计
- 数据加密
用户身份鉴别
- 系统提供的最外层安全保护措施
- 用户标识:由用户名和用户标识号组成(用户标识号在系统整个生命周期内唯一)
用户身份鉴别的方法
- 静态口令鉴别:静态口令-般由用户自己设定,这些口令是静态不变的
- 动态口令鉴别:口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录(数据库管理系统,即采用一次-一密的方法)
- 智能卡鉴别:智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能
存取控制
存取控制机制组成
- 定义用户权限,并将用户权限登记到数据字典中
- 用户对某一数据对象的操作权力称为权限
- DBMS提供适当的语言来定义用户权限,存放在数据字典中,称做安全规则或授权规则
- 合法权限检查
- 用户发出存取数据库操作请求
- DBMS查找数据字典,进行合法权限检查
自主存取控制方法
自主存取控制(Discretionary Access Control
简称DAC)
- 用户对不同的数据对象有不同的存取权限
- 不同的用户对同一对象也有不同的权限
- 用户还可将其拥有的存取权限转授给其他用户
关系型数据库中存取控制对象
权限授予:grant
发出GRANT
- 数据库管理员
- 数据库对象创建者(即属主Owner)
- 拥有该权限的用户
按受权限的用户
- 一个或多个具体用户
- PUBLIC (即全体用户)
// 把查询Student表权限授给用户U1
grant select on table student to user;
// 授予表的全部权限给用户
grant allprivileges on ...
// 授予所有用户
grant ...on ... to public
// 吧查询某列的权限授予用户
grant select(col1) ...
// 传播权限
......with grant option
权限回收:revoke
完整性
数据库的完整性
- 数据的正确性:是指数据是符 合现实世界语义,反映了当前实际状况的
- 数据的相容性:是指数据库同一对象在不同关系表中的数据是符合逻辑的
数据的完整性和安全性是两个不同概念
- 数据的完整性
- 防止数据库中存在不符合语义的数据,也就是防止数据
库中存在不正确的数据 - 防范对象:不合语义的、不正确的数据
- 防止数据库中存在不符合语义的数据,也就是防止数据
- 数据的安全性
- 保护数据库防止恶意的破坏和非法的存取
- 防范对象:非法用户和非法操作
为维护数据库的完整性,数据库管理系统必须:
- 提供定义完整性约束条件的机制
- 完整性约束条件也称为完整性规则,是数据库中的数据
必须满足的语义约束条件 - SQL标准使用了一系列概念来描述完整性,包括关系模
型的实体完整性、参照完整性和用户定义完整性 - 这些完整性一般由SQL的数据定义语言语句来实现
- 完整性约束条件也称为完整性规则,是数据库中的数据
- 提供完整性检查机制
- 数据库管理系统中检查数据是否满足完整性约束条件的机制,称为完整性检查。
- 一般在INSERT、 UPDATE、DEL .ETE语句执行后开始检查,也可以在事务提交时检查
- 违约处理:数据库管理系统若发现用户的操作违背了完整性约束条件,就采取一定的动作
- 拒绝(NO ACTION)执行该操作
- 级连(CASCADE)执行其他操作
实体完整性
关系模型的实体完整性
primary key; // 主码
单属性构成的码有两种说明方法
- 定义为列级约束条件
- 定义为表级约束条件
对多个属性构成的码只有一种说明方法
- 定义为表级约束条件
create table stu (
int A,
int B,
int C,
primary key(A)
);
实体检查完整性和违约处理
插入或对主码列进行更新操作时,关系数据库管理系统按照实体完整性规则自动进行检查。
- 检查主码值是否唯-一,如果不唯-则拒绝插入或修改
- 检查主码的各个属性是否为空,只要有一个为空就拒
绝插入或修改
检查记录中主码值是否唯一的一种方法是进行全表扫描
- 依次判断表中每一条记录的主码值与将插入记录上的
主码值(或者修改的新主码值)是否相同 - 表扫描缺点:十分耗时
- 为避免对基本表进行全表扫描,RDBMS核心一
般都在主码上自动建立一个索引
参照完整性
关系模型的参照完整性定义
- 在CREATE TABLE中用FOREIGN KEY短语定义哪些
列为外码 - 用REFERENCES短语指明这些外码参照哪些表的主码
create table stu(
int A;
int B;
int C;
primary key(A), // 在表级定义实体完整性
foreign key(C) references(A) // 在表级定义参照完整性
);
DBMS什么时候要进行参照完整性的检查?
- 一个参照完整性将两个表中的相应元组联系起来
- 对被参照表和参照表进行增删改操作时有可能破坏参照完整性,必须进行检查
参照完整性违约处理
- 拒绝( NO ACTION)执行:不允许该操作执行。该策略-一般设置为默认策略
- 级联(CASCADE)操作:当删除或修改被参照表(Student) 的一个元组造成了与参照表(SC)的不一致,则删除或修改参照表中的所有造成不一致的元组
- 设置为空值(SET-NULL):当删除或修改被参照表的一个元组时造成了不-致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。
用户自定义完整性
属性上
CREATE TABLE时定义属性上的约束条件
- 列值非空 (NOT NULL)
- 列值唯一(UNIQUE )
- 检查列值 是否满足一个条件表达式(CHECK)
属性上的约束条件检查和违约处理
- 插入元组或修改属性的值时,关系数据库管理系统检
查属性上的约束条件是否被满足 - 如果不满足则操作被拒绝执行
元组上
一般是通过check
元组上的约束条件检查和违约处理
- 插入元组或修改属性的值时,关系数据库管理系统检
查元组上的约束条件是否被满足
完整性约束命名子句
完整性约束命名子句
CONSTRAINT <完整性约束条件名><完整性约束条件>
- <完整性约束条件>包括NOT NULL、UNIQUE、
PRIMARY KEY短语、FOREIGN KEY短语、CHECK
短语等
修改表中的完整性限制
使用ALTER TABLE语句修改表中的完整性限制
alter table stu drop constraint c1;
断言
创建断言的语句格式
CREATE ASSERTION<断言名><CHECK子句>
- 每个断言都被赋予一个名字
- <CHECK子句>中的约束条件与WHERE子句的条件表达
式类似。