:数据库安全性完整性
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:数据库安全性完整性相关的知识,希望对你有一定的参考价值。
文章目录
第四章:数据库安全性
安全性概述
不安全因素:
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要的数据泄露
- 安全环境的脆弱性
安全性控制
- 用户身份鉴别:(静态口令、动态口令、生物特征、智能卡 鉴别)
- 存取控制
- 自主存取控制方法
- 授权:授予与收回
授权语句: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岁。
为维护完整性,需要实现如下功能:
- 提供定义完整性约束条件的机制
- 提供完整性检查的方法
- 进行违约处理
三大完整性
- 实体完整性:主码唯一且非空
- 参照完整性:外码的约束——要么为空,要么对应另一张表的主码
- 用户定义完整性:有以下三点
- 非空——
NOT NULL
- 列值为一——
UNIQUE
- 满足某一条件表达式——
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 <表名>
以上是关于:数据库安全性完整性的主要内容,如果未能解决你的问题,请参考以下文章