数据库笔记-数据库保护

完整和安全性

完整性约束
实体完整性约束-主码

主码不能为空

创建主码是在创建表的时候添加,可以直接在属性后面直接加主键,也可以在创建表的最后添加主键的属性。

-- 将属性直接说明成主码
Create Table employee(
	Eno char(4) Primary Key,
    Name varchar(8)
);
-- 在属性列表后单独说明主码
Create Table employee(
	Eno char(4),
    Name varchar(8),
    Primary key(Eno)
);

如果主码是一个属性组,那么只能用第二个方法:Primary Key(Ino,Eno)

除了主码,sql还提供UNIQUE关键字表示该属性不能重复出现,但是UNIQUE的属性可以定义为空,主码不能为空。一个表只能有一个码,但是能有多个UNIQUE说明。

参照完整性约束和外部码
外部码约束的说明
-- 在属性后直接加上关键字references
Create table employee(
	Eno char(4) Primary key
    Dno char(2) references department(Dno)
);
-- 在属性清单后加上外部码说明子句属性表中的属性可以有多个,但必须前后对应
-- foreign key (<属性表>) references <父表名>(<属性名表>)
Create table employee(
	Eno char(4) Primary key
    Dno char(2) ,
    foreign key(Dno) references department (Dno)
);
参照完整性约束的实现策略

sql三种方案RESTRICT(限制策略),CASCADE(级联策略),SET NULL(置空策略)

  • 限制策略是SQL的默认策略:任何违反参照完整性约束的更新都被系统拒绝,操作包括:

    • 插入新元组,其中外部码对应的属性值非空且不是外部表对应属性的分量

    • 修改表中的外部码属性,修改的属性不是外部表对应属性的分量值

    • 删除外部表的元组,该元组的外部码属性已经在主表的外部码属性中存在

  • 级联策略

    但删除或修改父表中的某元组的主码值时,子表中的该有外部码元组也被删除或修改以保证参照完整性

  • 置空策略

    当修改或删除父表中的主码时,将删除对应的外部码元组置为空。

SQL Server仅提供CASCADE(级联策略) 和 NO ACTION (限制策略)

具体实现:直接在外键设置后面加入下列代码

  • ON DELETE{CASCADE|NO ACTION}
  • ON UPDATE{CASCADE|NO ACTION}
用户自定义完整性约束

基于属性的check:直接在属性后面添加CHECK(<条件>)即可

基于元组的check:在属性列表后面,添加check(<条件>)

约束更新

为了更新 需要在定义约束时对约束命名

  • Eno char(4) CONSTRAINT PK_1 primary key
  • Dno char(4) CONSTRAINT FK_1 foreign key references department(Dno)
  • Alter Table constraint K_name 重定义
  • Constraint checkName check(…)
SQL触发器

触发方式

  • 对事件影响的每一行(每一元组)执行一次触发过程(for each row) 成为焊机触发器
  • 对整个事件只执行一次出发过程(for each statement) 称为语句级触发器,该方法是触发器的默认方式

触发时间

  • BEFORE 事件发生前
  • AFTER 事件发生后

触发器可以使用两个临时视图

inserted(新增或修改后的内容),deleted(被删除或删除前的内容)

数据库安全
用户标识和鉴别

鉴别方法:口令,利用用户的个人特征,磁卡

访问控制

控制权限(创建、撤销、查询、增删改的权限)

数据库用户的种类:一般数据库用户(connect),具有创建表权力的用户(resource),具有DBA特权的用户(DBA)

DBA的注册工作

  • DBA为用户进行注册–GRANT

    GRANT <特权类型> TO <用户标识符> [IDENTIFIED BY <口令>]
    -- 特权类型包括 CONNECT,RESOURCE,DBA
    GRANT RESOURCE TO WANG IDENTIFIED BY 123456
    
  • DBA对用户的注册–REVOKE

    REVOKE <特权类型清单> FROM <用户标识符>
    
一般授权

授权某个用户对某数据对象进行操作的权限

GRANT <权限清单>
	[on <对象类型><对象名>]
	TO<用户表示清单>[with GRANT OPTION];

with grant option则获得归权限的用户不仅课以执行这些操作,还获得用grant将这个权限授权其他用户的权限

收回一般授权给出的权限–revoke
REVOKE <权限清单>
	[ON <对象类型> <对象名>]
	FROM <用户表示附清单>
	[CASCADE]
  • 只有使用GRANT授出权限的用户(及DBA)才能使用本语句收回权限
  • 若有些用户把该权限授权给别人(with grant option)CASCADE 可以将间接受到此权限的用户也自动收回权限
  • 本语句只收回执行此语句用户的权限,其他用户也给他了这个权限,则他们还具有该权限,但是本语句的发布者发布的权限确实收回了
角色

角色:具有相同/相似权限的一组用户

角色成员:某些用户设置成一个角色,该用户就是角色成员。

对该角色进行权限设置,该角色的小组成员,自动继承角色的权限。

角色的种类:

  • 系统提供的角色
    • 固定的服务器角色
    • 固定的数据库角色
  • 用户自定义角色

某个用户的所有权限集合包含其直接授予获得的权限,加上其所属角色所继承下来的权限,再去掉被拒绝的权限。

对用户的授权,也可以先对角色授权,再把用户加入到角色中

视图和查询修改

为不同的用户定义不同的视图,可以达到访问控制的目的。在试图中,可以之定义该用户能访问的数据,使用户无法访问他无权访问的数据,从而达到对数据的安全保护的作用。

查询修改:用户访问时,能自动生成查询条件使其只能在规定的范围内查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值