授权控制-数据库用户分类、授权(GRANT)、收权(REVOKE)

一、引言

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)

相关推荐
Databend12 分钟前
Databend 原生数据血缘:追溯指标来源,检查变更影响
大数据·数据库·sql
镜舟科技22 分钟前
Semantic View 技术解析(二):业务口径如何进入数据库执行路径
数据库·sql·agent
TechWJ1 小时前
没有公网 IP 也想远程连 PostgreSQL?从本地数据库到固定 TCP 地址完整配置
大数据·数据库·网络安全·postgresql·内网穿透
得物技术2 小时前
指标平台:从语义底座到智能消费的实践路径|得物技术
数据库·人工智能·ai编程
StarRocks_labs2 小时前
当大模型调用进入执行引擎:StarRocks AI Function 全新能力解析
数据库·starrocks·sql·ai·pipeline·数据处理·join
TDengine (老段)2 小时前
TDengine 常见问题 TOP4
数据库·物联网·时序数据库·tdengine·涛思数据·升级·tdengine 问题
小蒜学长2 小时前
基于RFID技术的仓储管理系统设计(代码+数据库+LW)
java·数据库·spring boot·后端·rfid技术·仓储管理
梦影_2 小时前
Langchain简单快速上手教程(五)——聊天模型之流式传输
java·数据库·人工智能·python·langchain
润乾软件2 小时前
SQLazy:找出含 5 个以上连续字母表顺序字母的字符串
sql·sqlazy
数据狐(Datafox)3 小时前
1688商品列表API接口解析(附 JSON 样例)
java·开发语言·数据库·爬虫·json