存取控制机制主要包括定义用户权限和合法检查两个部分
定义用户权限并将用户权限登记到数据字典中
合法权限检查
定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统
C2级的数据库管理系统支持自主存取控制,B1级的数据库管理系统支持强制存取控制
这里主要通过SQl的GRANT
语句和REVOKE
语句来实现,在数据库系统中,定义存取权限称为授权
数据库对象
操作类型
在关系数据库系统中,存取控制的对象不仅有数据本身(基本表的数据、属性列上的数据),还有数据库模式(包括数据库、基本表、视图和索引的创建等)
对象类型 | 对象 | 操作类型 | |||
---|---|---|---|---|---|
数据库模式 | 模式 | CREATE SCHEMA | |||
基本表 | CREATE TABLE,ALTER TABLE | ||||
视图 | CREATE VIEW | ||||
索引 | CREATE INDEX | ||||
数据 | 基本表和视图 | SELECT,INSERT,UPDATE,DELETE,REFERENCE,ALL PRIVILEGES | |||
属性列 | SELECT,INSERT,UPDATE,REFERENCE,ALL PRIVILEGES |
GRANT <权限> [,<权限>]...
ON<对象类型><对象名>[,<对象类型><对象名>]...
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
如果指定了WITH GRANT OPTION
子句,则获得某种权限的用户还可以把这种权限在授予给其他的用户。如果没有指定WITH GRANT OPTION
子句,则获得某种权限的用户只能使用该权限,而不能传播该权限。
SQl标准允许具有[WITH GRANT OPTION]的用户把相应权限或其子集传递授予其他的用户但不允许循环授权,其被授予者不能把权限在授予回给授权者或其祖先。
-- 把对表SC的查询权限授予给所有用户
GRANT SELECT
ON TABLE SC
TO PUBLIC;
授予用户的权限可以有数据库管理员或其他授权者用REVOKE
语句收回,REVOKE
语句的一般格式为:
REVOKE<权限>[,<权限>]...
ON <对象类型><对象名>[,<对象类型><对象名>]...
FROM <用户>[,<用户>]...[CASCADE|RESTRICT];
-- 把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将”授权”的权限授予别人。因此称这样的存取控制是自主存取控制。
-- 默认用户拥有CONNECT权限
CREATE USER <USERNAME>[WITH][DBA|RESOURCE|CONNECT];
对CREATE USER
语句说明如下:
只有系统的超级用户才有权创建一个新的数据库用户。
新创建的数据库用户只有三种权限:CONNECT
、RESOURCE
、DBA
拥有的权限 | 是否可执行的操作 | |||
---|---|---|---|---|
CREATE USER | CREATE SCHEMA | CREATE TABLE | 登录数据库,执行数据查询和操纵 | |
DBA | 可以 | 可以 | 可以 | 可以 |
RESOURCE | 不可以 | 不可以 | 可以 | 可以 |
CONNECT | 不可以 | 不可以 | 不可以 | 可以,但必须拥有相应的权限 |
注意:CREATE USER语句不是SQl标准,因此不同的关系数据库管理系统的语法和内容相差甚远。
数据库角色是被命名的一组域数据库操作相关的权限,角色是权限的集合。
CREATE ROLE <角色名>
GRANT <权限>[,<权限>]...
ON<对象类型>对象名
TO<角色>[,<角色>]...
GRANT <角色1>[,<角色2>]...
TO <角色3>[,<角色4>]...
[WITH ADMIN OPTION]
-- REVOKE动作的执行者或者是角色的创建者或者是拥有这个(些)角色的ADMIN OPTION
REVOKE <权限>[,<权限>]...
ON <对象类型><对象名>
FROM <角色>[,<角色>]...
自主存取控制(MAC)能够通过授权机制有效的控制对敏感数据的存取。在这种授权机制下,仍可能存在数据的“无意泄露”。这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记。要解决这个问题,就需要对系统控制下的所有主客体实施强制存取控制策略。
系统中的活动实体,既包括数据库管理系统管理的实际用户,也包括代表用户的进程
系统中的被动实体,实收主体操纵的,包括文件、基本表、索引、视图等
对于实体(主体和客体),数据库管理系统会为他们每个实例都排一个敏感性标记
绝密(TS)
机密(S)
可信©
公开§
密级的次序是TS>=S>=C>=P。
主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。强制存取控制机制就是通过对比主体的敏感度标记和客体的敏感度标记,最终确定是否能够存取客体。
仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
仅当主体的许可证级别小于或等于客体的密级时,该主体才可以写相应的客体(写了就读不了)
如果违反了规则2,就有可能把数据的密级由高流向低,造成数据的泄露
强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记和数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。
审计功能把用户对数据库的所有操作自动记录下来放在审计日志中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
-- 对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER,UPDATE
ON SC;
-- 取消对SC表的一切审计
NOAUDIT ALTER,UPDATE
ON SC;
审计设置以及审计日志一般都储存在数据字典中。必须把审计开关打开(即把系统参数audit_trail
设为true
),才可以在系统表SYS——AUDITTRAIL中查看到审计信息。
数据库安全审计系统提供了一种是事后检查的安全机制。
根据一定的算法将原始数据——明文变换成不可直接识别的格式——密文,从而使得不知道解密算法的人无法获知数据的内容。
数据加密主要包括存储加密和传输加密
一般提供透明和非透明两种存储加密方式
类似于TCP的三次招手,四次握手
推理控制以及数据库应用中隐蔽信道和数据隐私保护等技术
处理的是强制存取控制未解决的问题,避免用户利用能够访问的数据推知更高密集的数据
处理内容也是强制存取控制未解决的问题
控制不愿被人知道或他人不便知道的个人数据的能力