数据库安全
- 用户标识 与 鉴别
- 用户标识 User Identification
- 口令 Password
- 存取控制
- 定义用户权限,并将用户权限 登记到数据字典中
- 合法权限检查
自主存取控制(DAC)方法
- 授权(Authorization):定义的存取权限 关系数据库系统中的存取权限
对象类型 | 对象 | 操作类型 |
---|---|---|
数据库 | 模式 | CREATE SCHEMA |
基本表 | CREATE TABLE,ALTER TABLE | |
模式 | 视图 | CREATE VIEW |
索引 | CREATE INDEX | |
数据 | 基本表和视图 | SELECT,INSERT,UPDATE,DELETE,REFERENCES, ALL PRIVILEGES |
数据 | 基本列 | SELECT,INSERT,UPDATE,REFERENCES,ALL PRIVILEGES |
- 授权 与 回收
-
授权 GRANT
GRANT <权限>[,<权限>]。。。 ON <对象类型> <对象名>[,<对象类型> <对象名>]。。。 TO <用户> , <用户>... [WITH GRANT OPTION];
例1:把查询Student 表的权限授权给用户U1;
GRANT SELECT ON TABLE Student TO U1;
例2:把对Student 表 和 Course 表的全部操作权限授予用户U2,U3
GRANT ALL PRIVILEGES ON TABLE Student,Course TO U2,U3;
例3, 把对表SC的查询权限授予所有用户
GRANT SELECT ON TABLE SC TO PUBLIC
例4:把查询Student 表和修改学生学号的权限授给用户U4.
GRANT UPDATE(Sno), SELECT ON TABLE Student TO U4
例5:把对表SC的INSERT权限授予U5用户,并允许将此授权再次授予其他用户。
GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION
例6:把例5中 U5 的权限授予给U6
GRANT INSERT ON TABLE SC TO U6 WITH GRANT OPTION
例7:U6的权限授予U7
GRANT INSERT ON TABLE SC TO U7
依次执行完 例1-例7之后 学生-课程数据库的用户权限表如下:
-
授权用户名 | 被授权用户名 | 数据库对象名 | 允许的操作类型 | 能否转授权 |
---|---|---|---|---|
DBA | U1 | 关系 Student | SELECT | 不能 |
DBA | U2,U3,U4 | 关系 Student,Course | ALL PRIVILEGES | 不能 |
DBA | PUBLIC | 关系 SC ,属性 Sno | UPDATE,SELECT | 不能 |
DBA | U5 | 关系 SC | INSERT | 能 |
U5 | U6 | 关系 SC | INSERT | 能 |
U6 | U7 | 关系 SC | INSERT | 不能 |
- REVOKE 撤回权限
REVOKE <权限>[,<权限>]... ON <对象类型> <对象名> [,<对象类型> <对象名>]... FROM <用户>,[,<用户>]...[CASCADE|RESTRICT]
例:把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno) ON TABLE Student FROM U4
例:收回所有用户对表SC的查询权限
REVOKE SELECT ON TABLE SC FROM PUBLIC
例:把用户U5对SC表的INSERT权限收回
REVOKE INSERT ON TABLE SC FROM U5 CASCADE
收回 U5 的 INSERT 权限必须级联 , 因为 U5 自己授权了 INSERT 权限给别人
此时的用户权限定义表示例
授权用户名 | 被授权用户名 | 数据库对象名 | 允许的操作类型 | 能否转授权 |
---|---|---|---|---|
DBA | U1 | 关系 Student | SELECT | 不能 |
DBA | U2 | 关系 Student | ALL | 不能 |
DBA | U2 | 关系 courses | ALL | 不能 |
DBA | U3 | 关系 Student | ALL | 不能 |
DBA | U3 | 关系 courses | ALL | 不能 |
DBA | U4 | 关系 Student | SELECT | 不能 |
- 创建数据库模式的权限
创建用户
CREATE USER <username> WITH [DBA|RESOURCE|CONNECT]
权限与可执行的操作对照表
拥有的权限 | CRATE USER | CREATE SCHEMA | CREATE TABLE | 登录数据库,执行数据库查询和操纵 |
---|---|---|---|---|
DBA | 可以 | 可以 | 可以 | 可以 |
RECOURCE | 不可以 | 不可以 | 可以 | 可以 |
CONNECT | 不可以 | 不可以 | 不可以 | 可以,前提是分配对应的权限 |
-
数据库角色
创建角色:
CREATE ROLE <角色名>
给角色授权
GRANT <权限> [,<权限>]... ON <对象类型> 对象名 TO <角色>[,<角色>]...
-
将一个角色授予其他的角色或用户
CRANT <角色1>[,<角色2>]... TO <角色3>[,<用户1>]... [WITH ADMIN OPTION]
角色3 拥有角色1和角色2的所有权限
WITH ADMIN OPTION: 权限可以传递下去
角色权限收回
REVOKE <权限>[,<权限>]... ON <对象类型><对象名> FROM <角色>[,<角色>]...
例1 将一组权限授权给用户
创建角色 R1
CREAT ROLE R1
授权
GRANT SELECT,UPDATE,INSERT ON TABLE Student TO R1
授权 角色 给用户
GRANT R1 TO 王平,张明,赵玲
收回王平的权限
REVOKE R1 FROM 王平
例2 角色权限修改(给 R1 添加 DELETE 权限)
GRANT DELETE ON TABLE Student TO R1
例3 删除 SELECT 权限
REVOKE SELECT ON TABLE Student FROM R1
强制存取控制(MAC)方法
主要应用在 军事部门和政府部门
针对数据层面的安全防护
视图机制
视图层级添加不同的操作权限,和表层级的操作一直
审计 Audit
用来检测用户操作 如 授权 Grant 收回 授权 REVOKE 登录等
例:审计 表SC 的修改操作
AUDIT ALTER,UPDATE ON SC
例: 取消对 表 SC 的审计
NOAUTIT ALTER,UPDATE ON SC
审计设置以及审计内容一般都存在数据字典中。必须把审计开关打开(audit_trail 设为 ture) 才可以在系统表(SYS_AUDITITRAIL) 中 查看审计信息
数据加密
两种加密方法:
替换方法: 使用秘钥( Encryption Key) 将明文中的每一个字符转换为密文中的一个字符。
-
置换方法: 将明文中的字符按照不同的顺序重新排列。
常常是两种加密方法糅合起来使用
统计数据库安全性
统计数据库允许用户查询聚集类型的信息(如:平均值,合计 等),但不允许查询单个记录信息。