从今天开始就要开始第四章——数据库安全性的学习。现在,开始练习。

关系数据库系统中存取控制对象

此次练习需要多个用户,所以首先应该创造几个用户。


然后就是发现,用户的登录名不能相同,不然会报错。

1.GRANT

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

  • WITH GRANT OPTION子句:
    。 指定:可以再授予
    。没有指定:不能传播
  • 语义:将对指定操作对象的指定操作权限授予指定的用户

【例4.1】把查询Student表权限授给用户U1

grant select
on table Student
to U1

执行之后

正确语句:

grant select
on Student
to U1

【例4.2】把对Student表和Course表的全部权限授予用户U2,U3

grant all privileges
on 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 update(Sno),select
on Student
to U4

对属性列的授权时必须明确指出相应属性列名

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

grant insert
on SC
to U5
with grant option

执行之后,U5不仅拥有了对表SC的INSERT权限,还可以传播此权限。

【例4.6】

grant insert
on SC
to U6
with grant option

同样,U6还可以将此权限授予U7
(但这里我感觉这也不是U5授予的,前面不都是这么写的吗?
希望有那位读者可以给出解答)

【例4.7】

grant insert
on SC
to U7

U7不能再传播此权限。

2.REVOKE
一般格式:
REVOKE <权限> [,<权限>]…
ON <对象类型> <对象名> [,<对象类型> <对象名>]…
FROM <用户> [,<用户>]…[CASCADE | RESTRICT]

【例4.8】把用户U4修改学生学号的权限收回

revoke update(Sno)
on Student
from U4

【例4.9】收回所有用户对表SC的查询权限

revoke select
on SC
from public

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

revoke insert
on SC
from U5 cascade