总结整理不易,希望大家点赞收藏。
给大家整理了一下计数据库系统概论中的重点概念,以供大家期末复习和考研复习的时候使用。
参考资料是王珊老师和萨师煊老师的数据库系统概论(第五版)。
数据库的安全性指的是保护数据库以防止不合法使用造成的数据泄露、更改、破坏。
(1) 非授权用户对数据库的恶意存取和破坏
(2) 敏感数据泄露
(3) 环境脆弱
(1) 用户身份鉴别:静态口令(密码),动态口令(验证码),生物特征(指纹,人脸),智能卡。
(2) 存取控制:自主存取控制:grant,revoke语句。通过对存取权限的设定来进行安全性控制,对数据本身没有安全性标记。
强制存取控制:对数据本身进行密级标记,无论数据怎么复制,标记和数据总是一体的。只有符合密级标记要求的用户才能操纵数据。适用于安全性要求较高的场合。
(3) 视图
(4) 审计:一种事后检查的方式,审计把用户对数据库的所有操作自动记录放在审计日记里。用于安全性检查。
Grant语句:
Grant select on table student To U1 With grant option //允许U1授权给其他用户
REVOKE语句:
Revoke insert On table sc From u1 (cascade/restrict) //cascade 级联收回U1授权出去的所有权限 Restrict 拒绝操作
创建数据库用户:
Create user u1 with DBA/RESOURCE/CONNECT //创建数据库模式的权限在创建数据库用户的时候才授权
DBA:所有权限 CONNECT只能登陆查询和操纵,不能创建别的东西 RESOURCE 可以创建表和查询、操纵。不能创建用户和模式 (默认connect)
角色使权限的合集,一般为具有相同权限的用户创建一个角色。
创建
Create role r1
授权 和给用户授权一样,可以给角色授权其他角色和用户:
Grant 角色1,角色2 To 角色3 With admin option
收回权限 和用户一样
定义:是指数据的正确性和相容性。是为了防止不符合语义的,不正确的数据。
为了为维护数据库的完整性,DBMS必须实现:
(1)完整性约束机制
(2)完整性检查方法
(3)进行违约处理
列级约束,表级约束。主码唯一,且非空。
全表扫描 Primary key();
参照完整性(外键):Foreign key(sno) references student(sno);
参照正确,存在。非空(因为参照主码啊)
A. 属性上的约束条件 Not null(非空) Unique(唯一) Check语句:sex char(2) check (sex in (‘男’,‘女‘));
违约就拒绝执行
B. 元组上的约束条件,可以设置不同属性之间的相互制约 Check (sex=’女’ or name not like ‘Ms.%’)
完整性约束命名子句
Constraint c1 check (sex in (‘男’,‘女‘)); //C1是约束名
Constraint c2 primary key (sno);
完整性约束都是在create table/alter table
的时候写 Alter table student Add constraint c3 check(age<20)
//限制数据库最多60个人选
创建
Create assertion ass_st Check(60>=( Select count(*) From course,scWhere course.cno=sc.cno and cname=’数据库’))
删除
Drop assertion ass_st
定义:触发器是用户定义在关系表上的一类由事件驱动的特殊过程。事件——条件——动作,当事件发生时,检查条件,条件符合就执行。
触发器分为insert,update,delete三种触发器
Create trigger t1 Before/after select/update/insert ( of sname 指定哪一列) on student
Referencing new/old row as R1 (给新的、旧的行取个名字,方便下面操作) For each row/statement When (条件) 触发体
例:
create trigger t1 After update of grade on sc Referencing Old row as oldtuple New row as newtuple
For each row When (newtuple.grade>=1.1* oldtuple.grade)
Insert into sc_u(sno,cno,oldgrade,newgrade) Values(oldtuple.sno,oldtuple.cno,oldtuple.grade,newtuple.grade)
For each row 当触发器事件发生,表有多少行,就执行多少次触发器动作体
语句级触发器
For each statement 当触发器事件发生,只执行一次
Drop trigger 触发器 on 表名
数据库不好找题,都是很零碎的知识点,还是要多记概念,SQL语句相对来说并不是很重要