数据库安全性与完整性
数据库安全性
概述
数据库安全性是指保护数据库以防止不合法使用所造成的数据泄露,更改或破坏
安全性控制
用户身份鉴别
静态口令鉴别
动态口令鉴别
生物特征鉴别
智能卡鉴别
存取控制
对象 | 操作类型 |
---|---|
模式 | CREATE SCHEMA |
基本表 | CREATE table ALTER table |
视图 | CREATE VIEW |
索引 | CREATE INDEX |
数据 | SELELCT INSERT UODATE DELETE REFERENCES ALL PRIVILEGES |
自主存取控制方法
- GRANT
授予用户对数据的操作权限
GRANT 权限...
ON 对象类型 对象名...
TO 用户...
WITH GRANT OPTION;
WITH GRANT OPTION:获得该权限的用户可以将该权限授予其他用户
GRANT SELECT
ON TABLE SC
TO U1
WITH GRANT OPTION;
GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO u4;
- REVOKE
收回用户对数据的操作权限
REVOKE SELECT
ON TABLE SC
FROM U1
CASCADE | RESTRICT
CASCADE :级联,收回具有权限传递的所有用户
RESTRICT:受限制的回收
- 数据库角色
数据库角色是被命名的一组与数据库操作相关的权限 角色是权限的集合,因此可以为一组具有相同权限的用户创建一个集合,使用角色来管理数据库可以简化授权过程
1,角色的创建
CREATE ROLE 角色名
2,角色的授权
GRANT 权限
ON 对象类型 对象名
TO 角色
3,将一个角色授予其他的角色或用户
GRANT 角色
TO 角色
WITH ADMIN OPTION
WITH ADMIN OPTION :可以传递角色权限
4,角色权限的收回
REVOKE 权限
ON 对象类型 对象名
FROM 角色
强制存取控制方法
自主存取控制 MAC能够通过授权机制有效控制对敏感数据的存取,但是用户对数据的存取权限是 自主的,可能造成数据泄露。
主体:系统中活动实体,实际用户或用户进程
客体:是受主体操纵的,包括文件、基本表、索引、视图
敏感度标记:绝密(TopSecret)>= Secret >= Confidential >= Public
- 仅当主体的许可级别大于或等于客体的密级的时,主体才能读取相应的客体
- 仅当主体的许可级别小于或等于客体的密级的时,主体才能写入相应的客体
视图机制
视图:由一个表或多张表导出
为不同用户定义不同视图,把数据对象限制在一定范围。通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而对数据提供一定得保护。
CREATE VIEW CS_Student
AS
SELECT * FROM Student
WHERE Sdept = 'CS'
GRANT SELECT
ON CS_Student
TO zs;
GRANT ALL PRIVILEGES
ON cs_Student
To 系主任
数据库完整性
数据库的完整性(integrity)是指数据的正确性(correctness)和相容性(compatability)
- 正确性:是指数据符合现实语义,反应当前实际状况
- 相容性:是指数据库同一对象在不同关系的数据是符合逻辑的。
约束机制
提供定义完整性约束条件的机制
实体完整性、参照完整性、用户定义完整性
实体完整性
定义在CREATE TABLE 中用 PRIMARY KEY定义。
两种定义方法:
- 列级定义主码:
CREATE TABLE Student (
sno CHAR(9) PRIMARY KEY,
sname CHAR(20) NOT NULL,
Ssex CHAR,
Sage SMALLINT,
Sdept CHAR(20)
);
- 表级定义主码:
CREATE TABLE Student (
sno CHAR(9),
sname CHAR(20) NOT NULL,
Ssex CHAR,
Sage SMALLINT,
Sdept CHAR(20)
PRIMARY KEY(sno)
);
参照完整性
关系模型的参照完整性在CREATE TABLE 用FOREIGN KEY 定义哪些列为外码 REFERENCES 指明这些外码参照哪些表的主码
CREATE TABLE SC (
sno CHAR(9) NOT NULL,
cno CHAR(4) NOT NULL,
grade SMALLINT,
PRIMARY KEY(sno, cno)
FOREIGN KEY(sno) REFERENCES Student(sno),
FOREIGN KEY(cno) REFERENCES Student(cno),
);
用户定义完整性
- 属性上约束条件的定义
- 列值非空 (not null)
- 列值唯一(unique)
- 检查列值是否满足一个条件表达式check( 短语 )
CREATE TABLE SC(
sno char(9) unique NOT NULL,
sex char check(sex IN ('男', '女')
grade SMALLINT check(grade >= 0 and grade <= 100)
}
- 元组上的约束条件定义
当学生的性别是男时,其名字不能以Ms.开头
CREATE TABLE Student (
sno CHAR(9),
sname CHAR(20) NOT NULL,
Ssex CHAR,
Sage SMALLINT,
Sdept CHAR(20)
PRIMARY KEY(sno)
CHECK (sex='女' OR sanme NOT LIKE 'MS.%')
);
完整性约束命名子句
CONSTRAIN 用来对完整性约束条件命名,从而可以灵活地增加、删除一个约束性条件。
- 完整性约束命名子句
CONSTRAIN <完整性约束命名名> <完整性约束条件>
CREATE TABLE Student (
sno CHAR(9)
CONSTRAINt c1 CHECK(sno BETWEEN 1919 and 9999),
sname CHAR(20) NOT NULL,
Ssex CHAR,
Sage SMALLINT,
Sdept CHAR(20)
PRIMARY KEY(sno)
CHECK (sex='女' OR sanme NOT LIKE 'MS.%')
);
- 修改表中的完整性限制
ALTER TABLE Student DROP CONSTRAINT C4; -- 删除
ALTER TABLE Student ADD CONSTRAINT C1 CHECK (sno BETWEEN 90000 AND 9999999);
ALTER TABLE Student ADD CONSTRAINT C1 CHECK (sage<14);
检查机制
提供完整性检查的方法
DBMS中检查数据是否满足完整性约束条件的机制称为完整性检查。一般在INSERT、UPDATE、DELETE语句执行后开始检查,也可在事务提交检查。
处理机制
进行违约处理
DBMS发现违约将执行一定动作:NO ACTION CASCADE