目录
一、完整性
1.概念
2.sql语言支持的两种约束
2.1静态约束
撤销追加约束
断言
2.3动态约束
触发器
二、安全性
用DBMS对数据库实现的两个特性
一、完整性
1.概念
指dbms保证的db的一种特性,在任何情况下的正确性、有效性、一致性
- 广义完整性:语义完整性、并发控制、安全控制、DB故障恢复
- 狭义完整性:专指语义完整性
2.sql语言支持的两种约束
2.1静态约束
列完整性--------域完整性约束(某一列)
表完整性--------关系完整性约束(多列或表) 与列完整性同理(多个列约束)
eg:定义sex只能取男女:
Ssex char(2) constraint csex check (Ssex='男'or Ssex='女'), //check 约束条件
//constraint为约束命名,便于删除
D# char(2) references Dept(D#) on delete cascade, //D#为外键,删除引用表则本表记录删除
注意:check中的条件可以是select where内where 后的语句,包含子查询
S# char(8) check (S# in(select S# from student)),
撤销追加约束
alter table tablename
drop constraint 约束名; //撤销一个约束
modify (score float(2) constraint 约束名 check()); //新增约束
//有些dbms支持独立追加约束,如下:
add constraint 约束名 check();
断言
//会增加数据库维护负担,只要更新都会检查这个断言,所以不建议
- 一个断言就是一个谓词表达式,表达希望数据库总能满足的条件
- 表约束列约束就是特殊的断言
- 语法: create assertion <约束名> check(.............)
2.3动态约束
触发器
trigger是一种过程性完整约束,能在特定时刻自动触发
完整性四元组(O,P,A,R),O表示数据集合,P表示谓词条件,A表示触发条件,R表示响应动作。
create tigger 触发器名 before/after
{insert/delete/update of 属性名
on 表名 reference new/old 变量
for each row/statement //对每一行/对整个操作所有元组
when () //题目条件
begin
//做出反应语句;
end;
}
例题:
二、安全性
数据库安全性(非授权人员、信息非公开、集中(分散)管理、DBS的安全级别)
DBMS的安全机制
#1.自主安全性机制:存取控制
通过权限在用户之间的传递,使用户自主管理数据库安全性
2.强制安全性机制:
对数据和用户强制分类,使得不同类别用户能够访问不同类别的数据
3.推断控制机制:
防止通过历史/公开信息,推断出一些不该知道的信息
4.数据加密存储机制:
通过加密、解密保护数据
自主安全性机制
DBA利用账户特权对用户账户的创建以及权限授权和撤销、安全级别调控
访问规则表:AccessRule::=(S,O,T,P)S:请求主体(用户),O:访问对象(属性、元组、关系、数据库),T:访问权力(增删改查) P:谓词(拥有权力需满足的条件)
1.accessrule通常存放在数据字典或系统目录,构成了所有用户对DB的访问权利
2.用户多时,可以按用户组建立访问规则
3.可以递归使用
eg:
Employee(P#,Pname,Page,Psex,Psalary,D#,HEAD)
要求:
员工管理人员:能访问数据库的所有内容,便于维护员工信息
收发人员:访问数据库以确认某员工是哪一部门,便于收发工作,只能访问基本信息
每个员工:允许访问自己的记录,以便查询自己的工资情况,但不能修改
部门领导:能够查询其所领导部门人员的所有情况
高层领导:能访问数据库的所有内容,但只能读
实现方法:
1.存储矩阵
2.视图
通过视图可以限制用户对关系中某些数据项的存取:
create 视图1 as select* from employee
create 视图2 as select Pname,D# from employee
通过视图可以将数据访问对象与谓词结合起来,限制用户对关系中某些元组的存取
create 视图3 as as select* from employee where P#=UserID
create 视图4 as as select* from employee where HEAD=UserID
3.sql语言
grant {all privileges/select,insert,delete,update}
on 表名/视图名
to{public/user-id} //public是允许所有用户使用授权权力,user-id是某一个用户账户,由DBA创建的合法账户
with grant option; //允许被授权者传播这些权力
假定UserId员工管理员为emp001,收发员emp002,高级领导为emp003,部门领导emp004
geant all privileges on employee to emp001;
grant select on 视图2 to emp002;
grant select on 视图3 to public;
grant select on 视图4 to emp004;
revoke on from ;
强制安全性机制
绝密(Top Secret)机密(secret)可信(Confidential)无分类(Unclassified)
1.高级别用户可以访问低级别数据对象
2.高级别用户不可以改低级别数据对象