数据库小结(二)

第四章 、数据库的安全性

非法使用数据库的情况

  • 编写合法程序绕过DBMS及其授权机制
  • 直接或编写应用程序执行非授权的操作
  • 通过多次合法查询数据库中推导出一些保密数据
  • 破坏安全性的行为可能是无意的,故意的,恶意的

数据库安全控制层次

在这里插入图片描述

数据安全性控制的常用方法

  • 用户标识和鉴定
  • 存取控制
  • 视图
  • 审计
  • 密码存储
--创建一个sql server验证模式的登录名
create login 'abc' with password='abc123!'

自主存取控制方法

  • 通过SQL的grant 语句和revoke语句实现
  • 用户权限组成
    • 数据对象
    • 操作类型
  • 定义存取权限称为授权
关系数据库系统中存取控制对象
对象类型对象操作类型
数据库模式create schema
基本表create table alter table
模式视图create view
索引create index
数据基本表和视图select index update delete references all privileges
数据属性列select insert update references all privileges
grant(将对指定对象的指定操作权限授予指定用户)

-- 创建一个用户U1,U2,U3,U4,U5
create login u1 with password = '123.';
create login u2 with password = '123.';
create login u3 with password = '123.';
create login u4 with password = '123.';
create login u5 with password = '123.';

create user u11 for login u1;
create user u12 for login u2;
create user u13 for login u3;
create user u14 for login u4;
create user u15 for login u5;
--把查询student 表的权限授予u1
grant select on student to u1;

--把对SC查询权限授予所有用户
grant select on sc to public;

-- 收回对sc表的所有权限
revoke select on sc from public;

--8)把对表SC的insert权限授予u1,并且徐云将此权限在授予其它用户
grant insert
on sc
to u1
with grant option


--通过劫色来实现把一组权限授予一个用户
grant insert,update,select on sc to u11;

--把对student表和course表的全部权限授予用于u2和u3
grant all privileges
on student
to uu2,uu3;
--把查询student表和修改学生学号的权限给用户uu4
grant select,update(sno)
on student
to uu4;

--安保用户uu5对sc表的insert权限收回
--cascade收回的时候,收回连续的权利
revoke insert 
on sc
from uu6
cascade;

--创建角色
create role r1;
grant insert ,update ,select on sc to r1;
-- 将角色授权给用户
--grant r1 to u11,uu2;--不符合SQL语法
exec sp_addrolemember r1,u11;

--将角色从用户收回
exec sp_droprolemember r1,u11;

视图机制

  • 视图机制要把保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
    • 视图机制更主要的功能在于提供数据的独立性,其安全保护功能不太精细,往往不能达到应用系统的要求。
    • 间接实现了支持存取谓词的用户权限的定义。
--建立计算机系学生的视图,把对该视图的SELECT限授于u11,把该视图上的所有操作权限授于张明。
--1、先建立视图
create view cs_student
as
select * from student where sdept='cs'

grant all privileges on cs_student to u11;

审计

  • 审计日志(Audit log)
    • 将用户对数据库的所有操作记录在上面
  • DBA利用审计日志
    • 找出非法存取数据的人,时间和内容
  • C2以上安全级别的DBMS必须具有

数据库的完整性与安全性

在这里插入图片描述

为了维护数据库的完整性,DBMS必须
  • 提供定义完整性约束条件的机制
  • 提供完整性检查方法
  • 违约处理

定义SC的参照完整性

create table sc
(
    sno char(9) not null,
    cno char(9) not null,
    grade smallint,
    primary key(sno,cno),
    foreign key (sno) references student(sno),
    foreign key (cno) references course(cno),
)

参照完整性检查和违约处理

被参照表(student)参照表(sc)违约处理
可能破坏参照完整性插入元组拒绝
可能破坏参照完整性修改外码值拒绝
删除元组可能破坏参照完整性拒绝/级联/删除/设置为空值
修改主码值可能破坏参照完整性拒绝/级联/删除/设置为空值
显示说明参照完整性的违约处理
create table sc1
(
    sno char(9) not null,
    cno char(4) not null,
    grade smallint,
    primary key (sno,cno),
    foreign key (sno) references student(sno)
        on delete cascade /*级联删除sc表中相应的元组*/
        on update cascade, /*级联更新sc表中相应的元组*/
    foreign key (cno) references course(cno)
        on delete no action
        /* 当删除course表中的元组造成与sc表不一致的时候拒绝删除*/
        on update cascade
        /*当更新course表中cno中,级联更新sc表宏相应的元组*/
)

用户定义的完整性

  • 属性上的约束条件和定义

  • 属性上的约束条件检查和违约处理

  • 元组上的约束条件的定义

  • 元组上的约束条件检查和违约处理

    • create table 时定义
      • 列值非空(Not null)
      • 列值唯一(unique)
      • 检查列值是否满足一个布尔表达式(check)
create table student1
(
    sno char(9) unique,
    sname char(8) not null,
    ssex char(2),
    sage smallint,
    sdept char(20),
    primary key (sno),
    check (ssex='女' or sname not like 'Ms.%')
)

完整性约束命名子句

  • 完整性约束命名字句
  • 修改表中的完整性限制
建立学生登记表Student2,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”
create table student2
(
    sno numeric(9)
    constraint c1 check (sno between 90000 and 99999),
    cname char(20)
    constraint c2 not null,
    sage numeric(3)
    constraint c3 check (sage<30),
    ssex char(2)
    constraint c4 check (ssex in ('男','女')),
    constraint studentKey primary key(sno)
)
建立教师表Teacher,要求每个教师的应发工资 不低于3000元。(应发工资等于实发工资Sal和扣除项Deduct之和)
create table teacher
(
    tno numeric(4) primary key,
    tname char(10),
    job char(8),
    sal numeric(7,2),
    deduct numeric(7,2),
    deptno numeric(7,2),
    constraint t_c1 check (sal+deduct>=3000)
);

修改表中的完整性限制

  • 简单来说:就是先删除,在增加(到底是怎么实现的吗?看下面几个列子)
修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改为小于40 。
--修改表Student2中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改为小于40 。
alter table student2 drop constraint c1;
alter table student2 add constraint c1 check (sno between 900000 and 999999);

alter table  student2 drop constraint c3;
alter table student2 add constraint c3 check(sage<40);

关系数据库理论

回顾

在这里插入图片描述

完整性约束的表现形式

  • 限定属性取值范围:例如成绩必须在0~100之间
  • 定义属性值间的相互关连

数据依赖的类型

  • 函数依赖(Functional Dependency ,简称为FD)
  • 多值依赖 (Multivalued Dependency,简称为MVD)
  • 其他

关系模式的简化表示

在这里插入图片描述

一个数据库可能会出现的问题

  • 数据冗余太大

  • 更新异常

  • 插入异常

  • 删除异常

    • 原因:由存在于关系模式中的某些数据依赖引起的
    • 解决方法:通过分解关系模式来消除其中不合适

完全函数依赖与部分函数依赖

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值