• 一、授权与收回
  • 二、角色
  • 三、视图
  • 四、审计


一、授权与收回

1.授权:GRANT

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

实验开始前我们要新建几个用户,直接在数据库,安全性,用户下右击新建即可,注意用户类型选择不带登录名的用户即可

mysql数据库安全性设计方案 数据库安全性设计实例_SQL

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

GRANT select
on table Student
to U1;

但是却显示关键字 ‘to’ 附近有语法错误。

原因是T-SQL中是不需要写TABLE的
执行以下代码

GRANT select
on  Student
to U1;

没有出现错误

可在U1用户处点击属性查看有选择权限

mysql数据库安全性设计方案 数据库安全性设计实例_语法错误_02


例4.2把对Student表和Course表的全部操作权限授予用户U2和U3

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

这次把TABLE去掉后仍然出现了错误,原因是不能对两个表同时授予权限,分开授权后

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

这次虽然没有出现错误,但是却出现了提示ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。
例4.3把对表SC的查询权限授予所有用户

GRANT SELECT
ON  SC
TO PUBLIC;

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

GRANT UPDATE(Sno),SELECT/*对属性列授权时必须明确指出相应的属性列名*/
ON  Student
TO U4;

mysql数据库安全性设计方案 数据库安全性设计实例_语法错误_03


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

GRANT INSERT
ON SC
TO U5
WITH GRANT OPTION;

指定了WITH GRANT OPTION 子句,则获得某种权限的用户还可以把这种权限再授予其他的用户,但要注意不能再把权限再授回给授权者或其祖先
例4.6 从U5给U6权限

GRANT INSERT
ON TABLE SC
TO U6
WITH GRANT OPTION;

例4.7U6给U7权限

GRANT INSERT
ON TABLE SC
TO U7

由于U6未给U7传播的权限,因此U7不能再传播此权限
2.收回 revoke
例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 TABLE SC
FROM U5 CASCADE

在这里命令执行成功了,但是在以往的例子中CASCADE并没有什么作用,用了级联后,U6和U7的权限也一并取消。

mysql数据库安全性设计方案 数据库安全性设计实例_EXEC_04

二、角色

1.角色的创建

CREATE ROLE<角色名>

刚刚创建的角色是空的,没有任何内容,可以用GRANT 为角色授权
2.给角色授权

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

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

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

该语句把角色授予某用户,或授予另一个角色。这样,一个角色(例如角色3)所拥有的权限就是授予它的全部角色(角色1和角色2)所包含的权限的总和。
如果指定了WITH ADMIN OPTION 子句,则获得某种权限的角色或用户还可以把这种权限再赋予其它的角色。
4.角色权限的收回

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

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

CREATE ROLE R1;

(2)然后使用GRANT语句,使角色R1拥有Student表的SELECT ,UPDATE,INSERT权限

GRANT SELECT,UPDATE,INSERT
ON Student
TO R1;

(3)接着给U1,U2,U3赋予角色

GRANT R1
TO U1,U2,U3;

但是却出现了语法错误

mysql数据库安全性设计方案 数据库安全性设计实例_EXEC_05


原因是在T-SQL中只能使用以下语句实现

EXEC sp_addrolemember 'R1','U1'
EXEC sp_addrolemember 'R1','U2'
EXEC sp_addrolemember 'R1','U3'

(4)收回U1权限

REVOKE R1
FROM U1

仍然出现语法错误,需用以下语句

EXEC sp_droprolemember 'R1','U1'

例4.12使角色R1在原来的基础上增加了Student表的DELETE权限

GRANT delete
on Student
to R1;

例4.13使R1减少了SELECT权限

REVOKE SELECT
ON Student
from R1;

三、视图

建立计算机系学生的视图,把对该视图的SELECT 权限授予U1,把该视图上的所有操作权限授予U2。
先要创建视图

CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept='CS';

接着把SELECT权限赋予U1

GRANT SELECT
ON CS_Student
TO 王平;

然后把所有的权限赋给U2

GRANT ALL PRIVILEGES
ON CS_Student
TO U2;

mysql数据库安全性设计方案 数据库安全性设计实例_SQL_06


mysql数据库安全性设计方案 数据库安全性设计实例_EXEC_07

四、审计

例4.15 对修改SC表结构或修改SC表结构数据的操作进行审计

AUDIT ALTER UPDATE
ON SC;

例 4.16 取消对SC表的一切审计

NOAUDIT ALTER UPDATE
ON SC;

要注意的是这两条语句在T-SQL中并不适用,具体方法还有点复杂,就先不写了

第四章的例题就到此结束了,总的来说跟第三章相比要记的东西少了很多,要注意的地方就是授权和角色两部分了。