一、引言
SQL语言的数据控制功能,体现在DBMS的授权机制上,目的是实现数据库的安全访问,确保只有授权用户才能访问数据库,所有未被授权的用户无法获取数据,如何利用SQL语言提供的授权(GRANT)语句和收权(REVOKE)语句来实现自主访问控制功能,这些功能大部分DBMS都支持
二、自主访问控制
自主访问控制就是用户自主控制对数据对象的操作权限
操作权限:用户对某一数据对象的操作权利
1、在DBMS中,用户对数据库的访问权限由两个要素组成:数据库对象和操作权限
2、数据库对象包括数据库、基本表、视图、索引
3、操作权限包括创建(CREATE)、修改(ALTER)、删除(DROP)、查询(SELECT)、更新(插入(INSERT)、修改(UPDATE)、删除(DELETE)),有的DBMS中用ALL PRIVILEGES表示所有操作权限
4、数据库用户
(1)系统管理员。DBMS在安装时,至少有一个系统管理员用户,系统管理员在DBMS上拥有一切权限,负责整个系统的管理
(2)数据库管理员(DBA)。该用户在自己所创建的数据库上拥有一切权限
(3)数据库对象用户。该用户可以建立数据库对象,如表、视图等,在这些数据库对象上拥有全部的操作权限
(4)数据库访问用户。可以对被授权的数据库对象进行操作,如查询数据、修改数据等
5、可以实现不同用户对于不同数据库对象有不同的操作权限,也可以实现不同用户对同一数据库对象有不同的操作权限
三、授权GRANT
1、GRANT语句用来实现权限的授予,向用户授予对某个或者某些数据库对象的操作权限
2、GRANT授权语句的一般格式
GRANT <权限列表>
ON <数据库对象>
To <用户列表>
【WITH GRANT OPTION】
注:加了WITH GRANT OPTION的GRANT授权语句可以使得被授权的用户可以将权限继续转授给其他用户
3、举例1:将查询sC表和修改学生成绩的权限授给用户user1
sql
grant select,update(grade)
on sC
to user1
with grant option;
四、收权REVOKE
1、REVOKE收权语句的一般格式:
REVOKE 【GRANT OPTION FOR】<权限表>
ON <数据库对象>
FROM <用户表>
【CASCADE|RESTRICT】
注:
(1)GRANT OPTION FOR:只有授权权限被收回
(2)CASCADE:把该用户授权给其他用户的权限同时级联收回
(3)RESTRINCT:当用户没有给其他用户授权时,才能收回权限
2、举例 1:将用户user1查询和修改学生学号的权限收回,并级联收回所授出的权限
sql
revoke select,update(grade)
on sC
from user1
cascade;
五、自主访问控制示例
1、授予用户user1对表c的更新权限
sql
grant update on c to user1;
2、授予用户user1对表s的查询权限,并具有给其他用户授权的权限
sql
grant select on s to user1
with grant option;
3、以user1登录,把对学生表s的查询权限授予给用户user2
sql
grant select on s to user2;
4、user1再把对课程表c的更新权限授予给用户user2
sql
grant update on c to user2;
5、DBA级联收回用户user1对学生表s的查询权限
sql
revoke select on s from user1 cascade;
注意:reovke语句的默认选项是RESTRICT
6、在用户user1具有对学生表s的select权限时,再授予其对视图sJ_s的select和update权限
sql
grant select,update
on sJ_s
to user1
7、用户user1修改视图中属性sNo为"202218014030"的学生姓名为"小龙女"
sql
update sJ_s
set sJ_sN='小龙女'
where sJ_sNo='202218014030'
8、用户user1再修改学生表s中属性sNo值为"202218014030"的学生姓名为"小龙女"
sql
update s
set sN='小龙女'
where sNo='202218014030'
9、结论:
(1)用户所具有的关系上的权限与其拥有的关系上的视图的权限是不同的
(2)用户只能在其具有的权限下对数据库进行操作
(3)DBMS可通过为用户定义视图,并为用户授予访问视图的相关权限,在满足用户操作需求的情况下,提高了数据库中数据的安全性
(4)利用GRANT和REVOKE语句,用户可以自主地决定将数据的存取权限授予其他用户,"自主"地决定是否也将"授权"的权限授予给其他用户
六、小结
1、基于角色的访问控制通过给角色授权来简化为用户授权的过程
2、自主访问控制(Discretionary Access Control)通过GRANT和REVOKE语句来实现权限的管理。访问控制方式灵活,但容易失控
3、高安全级别的DBMS要求支持强制访问控制(Mandatory Access Control)