> 文章列表 > 【MySQL】数据库完整性和安全性

【MySQL】数据库完整性和安全性

【MySQL】数据库完整性和安全性

目录

 

一、完整性

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 tablenamedrop  constraint 约束名;     //撤销一个约束modify (score float(2) constraint 约束名 check());   //新增约束//有些dbms支持独立追加约束,如下:add constraint 约束名 check();

断言

//会增加数据库维护负担,只要更新都会检查这个断言,所以不建议

  1. 一个断言就是一个谓词表达式,表达希望数据库总能满足的条件
  2. 表约束列约束就是特殊的断言
  3. 语法: 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.高级别用户不可以改低级别数据对象