四、数据库安全性
1、用户标识与鉴别
账户密码
2、存取控制:分为自主存取控制和强制存取控制
2.1、自主存取控制(DAC)
授权语句
:不允许循环授权
grant 权限
on 对象(基本表、视图等)
to 用户
[with grant option] # 若有,被授权的用户可以将该权限再授予其他用户
创建用户
create user 用户名
with 权限[DBA|RESOURCE|CONNECT]
# eg.把对student表和course表的全部权限授予用户u2、u3
grant all privileges
on table students,course
to u2,u3;
# eg.
grant update(sno),select
on table student
to u4;
权限 | 说明 |
---|---|
connect | 默认授予的权限,可以创建视图、定义数据的别名、授权查询或更新操作 |
resource | 可以授权或回收其他数据库用户对其创建的数据对象拥有的访问权,具有对数据对象的跟踪和审计功能 |
DBA | 所有权限 |
回收权限
revoke 权限
on 对象
from 用户 [cascade | restrict]
数据库角色
:
被命名的一组
与数据库操作相关的权限
权限的集合
# 创建数据库角色
create role 角色名
# 给角色授权一组权限
create role 角色名
grant update(sno),select
on table student
to 角色名
grant 角色名
to 用户名
2.2、强制存取控制(MAC)
对每一个用户授予某一个级别的许可证,对每一个数据对象标以一定的密级
对数据本身进行密级标记,无论如何复制,数据和标记都是一个不可分的整体
许可证级别 >= 密级 :可以读取
许可证级别 == 密级 :可以写入
使用MAC要首先实现DAC
2.3、补充
数据库最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的用户无法接近数据
3、视图机制
把保密的数据对无权存取这些数据的用户隐藏起来
可用视图机制屏蔽掉一部分保密数据
提供数据的独立性
4、审计
启用一个专用的审计日志将用户对数据的所有操作都记录在上面
缺点
:很费时间和空间
可以灵活的打开和关闭审计功能
# 打开审计功能
audit 操作
on 对象
# 关闭审计功能
no
audit 操作
on 对象
# eg.对修改SC表结构或修改SC表数据的操作进行审计
audit alter,update
on SC;
noaudit alter,update
on SC;
5、数据加密
密码的思想,明文、暗文
6、数据库安全机制的设计目标
试图破坏安全的人所花费的代价 >> 得到的利益
五、数据库完整性
数据库的完整性:
指数据的正确性和相容性
为了防止数据库中存在不符合语义的数据
1、实体完整性
实体完整性和参照完整性关系模型必须满足的完整性约束条件,被称作是关系的两个不变性
主码唯一且不能取空值
# 列级
create table student
(sno char(9) primary key, #列级
。。。。。。
)
# 表级
create table SC
(sno char(9) ,
cno char(9),
grade int,
primary key(sno,cno);
)
2、参照完整性
外码:
在一个关系中的非候选码是另一个关系的主码,则称这组属性为外码
外码不一定要与相应的主码同名
# 表级
create table course
(cno char(4)primary key,
cname char(40),
cpno char(4),
foreign key (cpno) references course(cno);
)
# 列级
create table SC
(sno char(9) foreign key (sno) references student(sno), #列级
cno char(9),
grade int,
primary key(sno,cno),
foreign key (cno) references course(cno); #表级
)
3、用户定义的完整性
针对某一具体关系数据库的约束条件
属性上约束条件、元组上约束条件
表示 | 说明 |
---|---|
not null | 不允许取空值 |
unique | 列值唯一 |
check短语 | 检查是否满足check后的布尔表达式 |
default | 列值缺省 |
4、域中的完整性
# eg.
create domain gender char(2)
check (value in ('男','女'))
create stu
(
....
ssex gender,
....
)
5、断言
定义一个整个数据库的判断条件
# eg.
create assertion party
check ((select count(*) from male + select count(*) from female) <= 30)
6、触发器
事件—条件—动作规则