数据库第七周实验——授权,角色——例题实现

授权:授予与收回

GRANT语句向用户授予权限
REVOKE语句收回已经授予用户的权限

1.GRANT

 GRANT <权限>[,<权限>]... 
 ON <对象类型> <对象名>[,<对象类型> <对象名>]…
 TO <用户>[,<用户>]...
 [WITH GRANT OPTION];

语义:将对指定操作对象的指定操作权限授予指定的用户

接受授权的用户可以是一个或多个具体用户,也可以是PUBLIC,即全体用户

WITH GRANT OPTION子句:
指定:获得某种权限的用户可以把这种权限再授予其他的用户
没有指定:获得某种权限的用户只能使用该权限,不能传播该权限。

SQL标准允许具有WITH GRANT OPTION的用户把相应权限或其子集传递授予其他用户,但不允许循环授权,即被授权者不能把权限再授回给授权者或祖先。

【例4.1】把查询Student表权限授给用户U1
注意:先建用户U1
一个登录名只能建一个用户
数据库第七周实验——授权,角色——例题实现
找到不用登录名的方法建用户,不知道有什么不同

GRANT SELECT
ON TABLE Student
TO U1;

数据库第七周实验——授权,角色——例题实现
去掉TABLE,执行成功

GRANT SELECT
ON Student
TO U1;

在用户U1 右键->【属性】->【安全对象】 有Student表
数据库第七周实验——授权,角色——例题实现
【例4.2】把对Student表和Course表的全部权限授予用户U2和U3
建立U2,U3用户

GRANT ALL PRIVILEGES
ON TABLE Student,Course
TO U2,U3;

数据库第七周实验——授权,角色——例题实现
要将两个表分开授权

GRANT ALL PRIVILEGES
ON  Student
TO U2,U3;
GRANT ALL PRIVILEGES
ON  Course
TO U2,U3;

数据库第七周实验——授权,角色——例题实现
【例4.3】把对表SC的查询权限授予所有用户

GRANT SELECT
ON SC
TO PUBLIC;

【例4.4】把查询Student表和修改学生学号的权限授给用户U4

GRANT SELECT,UPDATE(Sno)
ON Student
TO U4;

数据库第七周实验——授权,角色——例题实现
对属性列授权时必须明确指出相应的属性列名

【例4.5】把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户

GRANT INSERT
ON SC
TO U5
WITH GRANT OPTION;

执行例4.5后,U5不仅拥有了对表SC的INSERT权限, 还可以传播此权限,即由U5用户发上述GRANT命令给其他用户。
数据库第七周实验——授权,角色——例题实现
【例4.6】U5可以将此权限授予U6

GRANT INSERT
ON SC
TO U6
WITH GRANT OPTION;

数据库第七周实验——授权,角色——例题实现
【例4.7】U6可以将此权限授予U7

GRANT INSERT
ON SC
TO U7;

数据库第七周实验——授权,角色——例题实现
GRANT语句可以一次向一个用户授权,也可以向多个用户授权,还可以一次传播多个同类对象的权限,甚至一次可以完成对基本表和属性列这些不同对象的授权。
数据库第七周实验——授权,角色——例题实现
2.REVOKE

 REVOKE <权限>[,<权限>]... 
 ON <对象类型> <对象名>[,<对象类型><对象名>]…
 FROM <用户>[,<用户>]...[CASCADE | RESTRICT];

【例4.8 4.9】

--把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON Student
FROM U4;

--收回所有用户对表SC的查询权限
REVOKE SELECT 
ON SC
FROM PUBLIC;


【例4.10】把用户U5对SC表的INSERT权限收回

REVOKE INSERT
ON SC
FROM U5

数据库第七周实验——授权,角色——例题实现

REVOKE INSERT
ON SC
FROM U5 CASCADE;

将用户U5的INSERT权限收回的同时,级联(CASCADE)收回了U6和U7的INSERT权限,否则系统将拒绝执行该命令

注意:如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限
数据库第七周实验——授权,角色——例题实现

数据库角色

数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。

可以为一组具有相同权限的用户创建一个角色。

使用角色来管理数据库权限可以简化授权的过程。

1.角色的创建

CREATE  ROLE  <角色名> 
刚创建的角色是空的,没有任何内容。可以用GRANT为角色授权

2.给角色授权

 GRANT  <权限>[,<权限>]… 
 ON <对象类型>对象名  
 TO <角色>[,<角色>]…

3.将一个角色授予其他的角色或用户

GRANT  <角色1>[,<角色2>]…
TO  <角色3>[,<用户1>]… 
[WITH ADMIN OPTION]

该语句把角色授予某用户,或授予另一个角色。一个角色所拥有的权限就是授予它的全部角色所包含的权限的总和
授予者是角色的创建者或拥有在这个角色上的ADMIN OPTION
指定了WITH ADMIN OPTION则获得某种权限的角色或用户还可以把这种权限授予其他角色

一个角色的权限:直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限

4.角色权限的收回

REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…

用户可以回收角色的权限,从而修改角色拥有的权限
REVOKE动作的执行者或者是角色的创建者或者拥有在这个(些)角色上的ADMIN OPTION

【例4.11】通过角色来实现将一组权限授予一个用户
(1)首先创建一个角色 R1

CREATE ROLE R1;

数据库第七周实验——授权,角色——例题实现
(2)然后使用GRANT语句,使角色R1拥有Student表的 SELECT、UPDATE、INSERT权限

GRANT SELECT,UPDATE,INSERT
ON Student
TO R1;

(3)将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限

GRANT R1
TO 王平,张明,赵玲;

数据库第七周实验——授权,角色——例题实现
手动为R1添加角色成员
数据库第七周实验——授权,角色——例题实现
(4) 可以一次性通过R1来回收王平的这3个权限

REVOKE R1
FROM 王平;

数据库第七周实验——授权,角色——例题实现
手动删除

【4.12】角色的权限修改

GRANT DELETE
ON Student
TO R1;

【4.13】使R1减少了SELECT权限

REVOKE SELECT
ON Student
FROM R1;
上一篇:mysql忘记root密码,授权访问简单记录


下一篇:MySQL 开启远程连接