授权:授予与收回
用户可以“自主”地决定把数据的存取权限授予何人,决定是否也将“授权”的权限授予别人。这样的存取控制就是自主存取控制。
1. 授予权限 GRANT
- 一般格式
GRANT <权限>
ON <对象类型><对象名>
TO <用户>
[WITH GRANT OPTION];
将对指定操作对象的指定操作权限授予指定的用户。
GRANT发出者:数据库管理员 | 数据库对象创建者(属主owner) | 已拥有该权限的用户
指定WITH GRANT OPTION子句,则获得该权限的用户可把这种权限再授予其它用户。
/* 把对表SC的查询权限授予所有用户 */
GRANT SELECT
ON TABLE SC
TO PUBLIC;
/* 把查询Student表和修改学生学号的权限授给用户U1, U2
对属性列授权时必须明确指出相应的属性列名 */
GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO U1, U2;
2. 收回权限 REVOKE
- 一般格式
REVOKE <权限>
ON <对象类型><对象名>
FROM <用户>
[CASCADE | RESTRICT];
/* 把用户U1修改学生学号的权限收回 */
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U1;
/* 将用户U5的INSERT权限收回同时,级联收回U6和U7的INSERT权限 */
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
3. 创建数据库模式的权限
CREATE USER <username> [WITH] [DBA | RESOURCE | CONNECT];
只有系统的超级用户才有权创建一个新的数据库用户。
新创建的数据库用户有三种权限:CONNECT、RESOURCE和DBA。
CREATE USER 命令中如果没有指定创建的新用户的权限,默认CONNECT。
- 拥有CONNECT权限的用户不能创建新用户,不能创建模式,也不能创建基本表,只能登录数据库。
- 拥有RESOURCE权限的用户能创建基本表和视图。
- 拥有DBA权限的用户是系统中的超级用户。
数据库角色
数据库角色是一组权限的集合。使用角色来管理数据库权限可以简化授权的过程,使自主授权的执行更加灵活、方便。
1. 角色的创建
CREATE ROLE <角色名>
/* 创建角色R1 */
CREATE ROLE R1;
2. 给角色授权
GRANT <权限>
ON <对象类型><对象名>
TO <角色>
/* 使角色1拥有Student表的SELECT、UPDATE、INSERT权限 */
GRANT SELECT, UPDATE, INSERT
ON TABLE Student
TO R1;
3. 将一个角色授予其他的角色或用户
GRANT <角色1> [,<角色2>]
TO <角色3> [,<用户1>]
[WITH ADMIN OPTION];
/* 将角色R1授予王平、张明、赵玲,使他们拥有R1的全部权限 */
GRANT R1
TO 王平, 张明, 赵玲;
/* 一次性通过R1收回王平的三个权限 */
REVOKE R1
FROM 王平;
4. 角色权限的收回
REVOKE <权限>
ON <对象类型><对象名>
FROM <角色>
/* 收回角色R1的这三个权限 */
REVOKE SELECT, UPDATE, INSERT
ON TABLE Student
FROM R1;
视图机制
为不同用户定义不同的视图,把数据对象限制在一定的范围内。
视图机制间接地实现支持存取谓词的用户权限定义。
CREATE VIEW CS_Student /* 先建立视图CS_Student */
AS
SELECT *
FROM Student
WHERE Sdept = 'CS':
GRANT SELECT /* 王平老师只能检索计算机系学生的信息 */
ON CS_Student
TO 王平;
GRANT ALL PRIVILEGES /* 系主任张明具有检索和增删计算机系学生信息的所有权限 */
ON CS_Student
TO 张明;
审计
审计功能把用户对数据库的所有操作自动记录下来放入审计日志中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容。
/* 对修改SC表结构或修改SC表数据的操作进行审计 */
AUDIT ALTER, UPDATE
ON SC;
/* 取消对SC表的一切审计 */
NOAUDIT ALTER, UPDATE
ON SC;