:数据库安全性完整性

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:数据库安全性完整性相关的知识,希望对你有一定的参考价值。

视频
参考资料
内容来自参考链接和视频。

文章目录

第四章:数据库安全性

安全性概述

不安全因素:

  1. 非授权用户对数据库的恶意存取和破坏
  2. 数据库中重要的数据泄露
  3. 安全环境的脆弱性

安全性控制

  1. 用户身份鉴别:(静态口令、动态口令、生物特征、智能卡 鉴别)
  2. 存取控制
  3. 自主存取控制方法
  4. 授权:授予与收回

授权语句:GRANT
格式:

       GRANT <权限>[,<权限>]... 
       [ON <对象类型> <对象名>]
       TO <用户>[,<用户>]...
       [WITH GRANT OPTION];

语义:将对指定操作对象的指定操作权限授予指定的用户

发出GRANT:

  • DBA
  • 数据库对象创建者(即属主Owner)
  • 拥有该权限的用户

按受权限的用户:

  • 一个或多个具体用户
  • PUBLIC(全体用户)

WITH GRANT OPTION子句:

  • 指定:可以再授予
  • 没有指定:不能传播

不允许循环授权:


以上图来自参考链接。
例1:把查询Student表的权限授权给用户U1.

GRANT SELECT//SELECT就是查询
ON TABLE Student
TO U1;

例2:把对Student和Course表的全部操作权限授予用户U2和U3.

GRANT ALL PRIVILEGES//全部权限就是 ALL PRIVILEGES
ON TABLE Student,Course
TO U2,U3;

例3:把对表SC的查询权限授给所有用户

GRANT SELECT
ON TABLE SC
TO PUBLIC;//PUBLIC就是所有用户

例4:把查询Student表和修改学生学号的权限授给用户U4.

GRANT SELECT,UPDATE(Sno)//修改 UPDATE,括号内是只能更新的属性
ON TABLE Student
TO U4;

例5:把对SC的INSERT权限授予U5,并允许将此权限再授予给其他用户WITH GRANT OPTION;此语句可以使被授予的用户传播此权限

GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;//此语句可以使用户传播此权限

回收语句:REVOKE

格式:

      REVOKE <权限>[,<权限>]... 
      [ON <对象类型> <对象名>]
      FROM <用户>[,<用户>]...;

例1:把用户U4修改学生学号的权限收回

REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;

例2:收回所有用户对表SC的查询权限。

REVOKE SELECT
ON TABLE SC
FROM PUBLIC;

例3:把用户U5对SC的INSERT权限收回。

REVOKE INSERT
ON TABLE SC
FROM SC CASCADE;//级联收回

注意:这里U5->U6->U7,使用CASCADE会在收回U5的同时也收回U6和U7.


角色
角色指的是一类人。

创建:

CREATE ROLE<角色名>;

假设我们创建了角色名R1.
授权:R1这一类角色都获得了对Student的查询,更新,插入权限。

GRANT SELECT,UPDATE,INSERT
ON TABLE Student
TO R1;

将角色授予给其他角色或用户:小明和R2获得了R1这个角色(给R1角色添加用户)。

GRANT R1
TO 小明,R2;

收回:收回R1角色的查询Student表的权限。

REVOKE SELECT
ON TABLE Student
FROM R1;

试图机制

为不同的用户定义不同的视图,把不需要的数据隐藏起来,这样用户就不会进行误操作。

审计

把数据库所有操作都记录到审计日志中,然后就可以通过日志审查这里面是否存在非法行为。

数据加密

通过一些加密算法,把明文变成密文,这样别人就无法查看。

第五章:数据库完整性

正确性、相容性

正确性:是指数据是符合现实世界语义、反映当前实际状况的。如人类的性别,只能是男和女。
相容性:是指数据库同一对象在不同关系表中的数据是符合逻辑的。如年龄一般都在1-150岁。

为维护完整性,需要实现如下功能:

  1. 提供定义完整性约束条件的机制
  2. 提供完整性检查的方法
  3. 进行违约处理

三大完整性

  • 实体完整性:主码唯一且非空
  • 参照完整性:外码的约束——要么为空,要么对应另一张表的主码
  • 用户定义完整性:有以下三点
  1. 非空——NOT NULL
  2. 列值为一——UNIQUE
  3. 满足某一条件表达式——check

用户定义完整性的4种方法:

创建的时候用check进行约束

create table Student

	Sno char(9),
	Sname char(8) NOT NULL, /*用户定义完整性之NOT NULL非空*/
	Ssex char(2),
	check(Ssex='女' or Sname Not Like '张%');
	/*这个表中的项必须满足:性别是女的 或者 不姓张*/

用constraint进行完整性约束
例:建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。


    CREATE TABLE Student
      (Sno  NUMERIC(6)
        CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
        Sname  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)
      )

C1、C2、C3、C4是那些完整性约束的名字。

断言
也是实现用户定义完整性的,比check高级一点。

create assertion <断言名><check子句>

例:数据库中最多只有60学生选修。

create assertion 断言名
check(
	60 >= select count(*)
	from SC
	GROUP BY Cno;
)

只有符合check()里面的表示式才可以执行成功,否则就会执行失败。

触发器
用户定义在关系表上的一类由事件驱动的特殊过程。

比断言更高级。

格式:

CREATE TRIGGER <触发器名>  
BEFORE| AFTER <触发事件> ON <表名>
FOR EACH  ROW | STATEMENT
[WHEN <触发条件><触发动作体>




删除触发器:DROP TRIGGER <触发器名> ON <表名>

2022深度学习开发者峰会 5月20日13:00让我们相聚云端,共襄盛会!

以上是关于:数据库安全性完整性的主要内容,如果未能解决你的问题,请参考以下文章

:数据库安全性完整性

数据库系统原理之数据库安全与保护

数据库系统原理(第6章:数据库安全与保护)

数据库原理实验三——数据完整性与安全性控制

Oracle数据库安全产品的兼容性列表及几个问题

Oracle数据库安全产品的兼容性列表及几个问题