-
1 讲稿
-
2 习题
-
3 PPT
用户权限是由两个要素组成:数据库对象 操作类型
| 对象类型 | 对象 | 操 作 类 型 |
| 数据库 模式 | 模式 | 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)语义:将对指定操作对象的指定操作权限授予指定的用户
1)发出GRANT:
l数据库管理员
l数据库对象创建者(即属主Owner)
l拥有该权限的用户
2)按受权限的用户
l一个或多个具体用户
lPUBLIC(即全体用户)
(2)WITH GRANT OPTION子句:
n指定:可以再授予
n没有指定:不能传播
[例4.1]把查询Student表权限授给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
[例4.2] 把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILIGES
ON TABLE Student,Course
TO U2,U3;
[例4.3] 把对表SC的查询权限授予所有用户
GRANT SELECT
ON TABLE SC
TO PUBLIC;
[例4.4] 把查询Student表和修改学生学号的权限授给用户U4
GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO U4;
说明:对属性列的授权时必须明确指出相应属性列名
[例4.5] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
执行例4.5后,U5不仅拥有了对表SC的INSERT权限,
还可以传播此权限:
[例4.6]GRANTINSERT
ON TABLE SC
TO U6
WITHGRANT OPTION;
同样,U6还可以将此权限授予U7:
[例4.7] GRANT INSERT
ON TABLE SC
TO U7;
但U7不能再传播此权限。
执行了例4.1~例4.7语句后学生-课程数据库中的用户权限定义表
| 授权用户名 | 被授权用户名 | 数据库对象名 | 允许的操作类型 | 能否转授权 |
| DBA | U1 | 关系Student | SELECT | 不能 |
| DBA | U2 | 关系Student | ALL | 不能 |
| DBA | U2 | 关系Course | ALL | 不能 |
| DBA | U3 | 关系Student | ALL | 不能 |
| DBA | U3 | 关系Course | ALL | 不能 |
| DBA | PUBLIC | 关系SC | SELECT | 不能 |
| DBA | U4 | 关系Student | SELECT | 不能 |
| DBA | U4 | 属性列Student.Sno | UPDATE | 不能 |
| DBA | U5 | 关系SC | INSERT | 能 |
| U5 | U6 | 关系SC | INSERT | 能 |
| U6 | U7 | 关系SC | INSERT | 不能 |
二、REVOKE
授予的权限可以由数据库管理员或其他授权者用REVOKE语句收回vREVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE| RESTRICT];
[例4.8] 把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
[例4.9] 收回所有用户对表SC的查询权限
REVOKE SELECT
ONTABLE SC
FROM PUBLIC;
[例4.10] 把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE ;
n将用户U5的INSERT权限收回的时候应该使用CASCADE,否则拒绝执行该语句
n如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限
执行例4.8~4.10语句后学生-课程数据库中的用户权限定义表
| 授权用户名 | 被授权用户名 | 数据库对象名 | 允许的操作类型 | 能否转授权 |
| DBA | U1 | 关系Student | SELECT | 不能 |
| DBA | U2 | 关系Student | ALL | 不能 |
| DBA | U2 | 关系Course | ALL | 不能 |
| DBA | U3 | 关系Student | ALL | 不能 |
| DBA | U3 | 关系Course | ALL | 不能 |
| DBA | U4 | 关系Student | SELECT | 不能 |
三、创建数据库模式的权限
create user <username> [with][DBA|RESOURSE|COUNT];
create user语句说明如下:
(1)只有系统的超级用户才有权创建一个新的数据库用户;
(2)新创建的数据库用户有三种权限:connect resouce DBA
(3)create user命令中如果没有指定创建的新用户的权限,默认该用户拥有connect权限。
(4)拥有resource 权限的用户能创建基本表和视图。
(5)拥有DBA权限的用户是系统中的超级用户,可以创建新的用户、创建模式、创建基本表和视图等;DBA拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户。
| 拥有的权限 | 可否执行的操作 | |||
| CREATE USER | CREATE SCHEMA | CREATE TABLE | 登录数据库 ,执行数据查询和操纵 | |
| DBA | 可以 | 可以 | 可以 | 可以 |
| RESOURCE | 不可以 | 不可以 | 不可以 | 不可以 |
| CONNECT | 不可以 | 不可以 | 不可以 | 可以,但必须拥有相应权限 |
四、数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。
1、角色的创建
create role <角色名>
2、给角色授权
GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
3、将一个角色授予其他的角色或用户
grant <角色1>[,<角色2>]...
to <角色3>[,<用户1>]...
[with admin option]
4、角色权限的收回
revoke <权限1>[,<权限2>]...
on <对象类型><对象名>
from <角色1>[,<角色2>]...
五、强制存取控制方法
(一)强制存取控制(MAC)
1保证更高程度的安全性
2用户不能直接感知或进行控制
3适用于对数据有严格而固定密级分类的部门
l 军事部门
l 政府部门
(二)在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类
(三)主体是系统中的活动实体
n 数据库管理系统所管理的实际用户
n 代表用户的各进程
(四)客体是系统中的被动实体,受主体操纵
n 文件、基本表、索引、视图
六、敏感度标记(Label)
(一) 对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)
(二)敏感度标记分成若干级别
l绝密(Top Secret,TS)
l机密(Secret,S)
l可信(Confidential,C)
l公开(Public,P)
lTS>=S>=C>=P
(三)主体的敏感度标记称为许可证级别(Clearance Level)
(四)客体的敏感度标记称为密级(ClassificationLevel)
强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供更高级别的安全性。

