数据库安全性:
数据库的一大特点是数据可以共享
数据共享必然带来数据库的安全性问题
数据库系统中的数据共享不能是无条件的共享
用户标识与鉴别
用户名和口令易被窃取,每个用户预先约定好一个计算过程或者函数
存取控制
常用存取控制方法
自主存取控制(Discretionary Access Control ,简称DAC)
C2级
灵活
强制存取控制(Mandatory Access Control,简称 MAC)
B1级
严格
授权与回收
一、GRANT
GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
[ON <对象类型> <对象名>]
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
语义:将对指定操作对象的指定操作权限授予指定的用户
发出GRANT的用户
DBA
数据库对象创建者(即属主Owner)
拥有该权限的用户
按受权限的用户
一个或多个具体用户
PUBLIC(全体用户)
WITH GRANT OPTION子句:
指定:可以再授予
没有指定:不能传播
二、REVOKE
授予的权限可以由DBA或其他授权者用REVOKE语句收回
REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户>[,<用户>]...;
小结:SQL灵活的授权机制
DBA:拥有所有对象的所有权限
不同的权限授予不同的用户
用户:拥有自己建立的对象的全部的操作权限
GRANT:授予其他用户
被授权的用户
“继续授权”许可:再授予
所有授予出去的权力在必要时又都可用REVOKE语句收回
三、创建数据库模式的权限
DBA在创建用户时实现
CREATE USER语句格式
CREATE USER <username>
[WITH][DBA | RESOURCE | CONNECT]
数据库角色
数据库角色:被命名的一组与数据库操作相关的权限
角色是权限的集合
可以为一组具有相同权限的用户创建一个角色
简化授权的过程
类比:Windows操作系统中的用户组
一、角色的创建
CREATE ROLE <角色名>
二、给角色授权
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…
三、将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
四、角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
自主存取控制缺点
可能存在数据的“无意泄露”
原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
解决:对系统控制下的所有主客体实施强制存取控制策略
强制存取控制(MAC)
保证更高程度的安全性
用户不能直接感知或进行控制
适用于对数据有严格而固定密级分类的部门
军事部门
政府部门
主体是系统中的活动实体
客体是系统中的被动实体,是受主体操纵的
敏感度标记(Label)
绝密(Top Secret)
机密(Secret)
可信(Confidential)
公开(Public)
主体的敏感度标记称为许可证级别(Clearance Level)
客体的敏感度标记称为密级(Classification Level)
强制存取控制规则
(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
(2)仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体
修正规则
主体的许可证级别 <=客体的密级 ——>à 主体能写客体
规则的共同点
禁止了拥有高许可证级别的主体更新低密级的数据对象
SQL Server支持两种认证方式
Windows认证模式
混合认证模式
权限分类
对象权限和语句权限
对象权限
针对表、视图、存储过程
决定了能对表、视图、存储过程执行哪些操作,包括UPDATE、DELETE、INSERT、EXECUTE
语句权限
用户是否具有权限来执行某一语句
这些语句通常是一些具有管理性的操作,如创建数据库、表、存储过程等
数据库完整性
数据库的完整性
数据的正确性和相容性
数据的完整性和安全性是两个不同概念
数据的完整性
防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
防范对象:不合语义的、不正确的数据
数据的安全性
保护数据库防止恶意的破坏和非法的存取
防范对象:非法用户和非法操作
为维护数据库的完整性,DBMS必须:
提供定义完整性约束条件的机制
提供完整性检查的方法
违约处理
单属性构成的码有两种说明方法
定义为列级约束条件
定义为表级约束条件
对多个属性构成的码只有一种说明方法
定义为表级约束条件
插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:
检查主码值是否唯一,如果不唯一则拒绝插入或修改
检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改
参照完整性
用REFERENCES短语指明这些外码参照哪些表的主码
例如,关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和Course表的主码
用户定义的完整性
CREATE TABLE时定义
列值非空(NOT NULL)
列值唯一(UNIQUE)
检查列值是否满足一个布尔表达式(CHECK)
CONSTRAINT 约束
CONSTRAINT <完整性约束条件名>
[PRIMARY KEY短语 | FOREIGN KEY短语 | CHECK短语 ]
修改表中的完整性限制
使用ALTER TABLE语句修改表中的完整性限制
可以先删除原来的约束条件,再增加新的约束条件
ALTER TABLE Student
DROP CONSTRAINT C1;
ALTER TABLE Student
ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999);
ALTER TABLE Student
DROP CONSTRAINT C3;
ALTER TABLE Student
ADD CONSTRAINT C3 CHECK (Sage < 40);