暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第四章 数据库的安全性(3)——数据库安全性控制(2) 之授权

凯哥的故事 2020-05-14
803

授权:授予与收回

SQL中使用GRANTREVOKE语句向用户授予或收回对数据的操作权限。GRANT语句向用户授予权限,REVOKE语句收回已经授予用户的权限。

①GRANT

GRANT语句的一般格式为

GRANT<权限>[,<权限>]…

ON<对象类型> <对象名> [,<对象类型><对象名>]…

TO<用户>[<用户>]…

[WITH GRANT OPTION];

其语义为:将对指定操作对象的指定操作权限授予指定的用户。发出该GRANT语句的可以是数据库管理员,也可以是该数据库对象创建者(即属主owner),还可以是已经拥有该权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是PUBLIC,即全体用户。

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

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

例1】把查询Student表的权限授给用户U1。

GRANT SELECT

ON TABLE Student

TO U1;

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

GRANT ALL PRIVILEGES

ON TABLE Student,Course

TO U2,U3;

例3】把对表SC的查询权限授予所有用户。

GRANT SELECT

ON TABLE SC

TO PUBLIC;

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

GRANT UPDATE(Sno), SELECT

ON TABLE Student

TO U4;

这里,实际上要授予U4用户的是对基本表Student的SELECT权限和对属性列Sno的UPDATE权限。对属性列授权时必须明确指出相应的属性列名。

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

GRANT INSERT

ON TABLE SC

TO U5

WITH GRANT OPTION;

执行此SQL语句后,U5不仅拥有了对表SC的INSERT权限,还可以传播此权限,即由U5用户发上述GRANT命令给其他用户。例如U5可以将此权限授予U6(例6)。

例6

GRANT INSERT

ON TABLE SC

TO U6

WITH GRANT OPTION;

同样,U6还可以将此权限授予U7(例7)。

例7

GRANT INSERT

ON TABLE SC

TO U7;

因为U6未给U7传播的权限,因此U7不能再传播此权限。

由上面的例子可以看到,GRANT语句可以一次向一个用户授权,如例1所示,这是最简单的一种授权操作;也可以一次向多个用户授权,如例2、3所示;还可以一次传播多个同类对象的权限,如例2所示;甚至一次可以完成对基本表和属性列这些不同对象的授权,如例4所示。下表是执行了例1~7的语句后学生-课程数据库中的用户权限定义表。

②REVOKE

授予用户的权限可以由数据库管理员或其他授权者用REVOKE语句收回,REVOKE语句的一般格式为

REVOKE<权限>[,<权限>]…

ON <对象类型><对象名> [,<对象类型><对象名>]…

FROM<用户>[,<用户>]…[CASCADE| RESTRICT];

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

REVOKE UPDATE(Sno)

ON TABLE Student

FROM U4;

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

REVOKE SELECT

ON TABLE SC

FROM PUBLIC;

例10】把用户U5对SC表的INSERT权限收回。

REVOKE INSERT

ON TABLE SC

FROM U5 CASCADE;

将用户U5的INSERT权限收回的同时,级联(CASCADE)收回了U6和U7的INSERT权限,否则系统将拒绝执行该命令。因为在例6中,U5将对SC表的INSERT权限授予了U6,而U6又将其授予了U7(例7)。

注意:这里默认值为CASCADE,有的数据库管理系统默认值为RESTRICT,将自动执行级联操作。如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限。

下表是执行了例8~10的语句后学生-课程数据库的用户权限定义。

SQL提供了非常灵活的授权机制。数据库管理员拥有对数据库中所有对象的所有权限,并可以根据实际情况将不同的权限授予不同的用户。

用户对自己建立的基本表和视图拥有全部的操作权限,并且可以用GRANT语句把其中某些权限授予其他用户。被授权的用户如果有“继续授权”的许可,还可以把获得的权限再授予其他用户。

所有授予出去的权力在必要时又都可以用REVOKE语句收回。

可见,用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将“授权”的权限授予别人。因此称这样的存取控制是自主存取控制

③创建数据库模式的权限

GRANT和REVOKE语句向用户授予或收回对数据的操作权限。对创建数据库模式一类的数据库对象的授权则由数据库管理员在创建用户时实现。

CREATE USER语句一般格式如下:

CREATE USER <username> [WITH] [DBA| RESOURCE| CONNECT];

对CREATE USER语句说明如下:

1.只有系统的超级用户才有权创建一个新的数据库用户。

2.新创建的数据库用户有三种权限:CONNECT、RESOURCE和DBA。

3.CREATE USER命令中如果没有指定创建的新用户的权限,默认该用户拥有CONNECT权限。拥有CONNECT权限的用户不能创建新用户,不能创建模式,也不能创建基本表,只能登录数据库。由数据库管理员或其他用户授予他应有的权限,根据获得的授权情况他可以对数据库对象进行权限范围内的操作。

4.拥有RESOURCE权限的用户能创建基本表和视图,成为所创建对象的属主,但不能创建模式,不能创建新的用户。数据库对象的属主可以使用GRANT语句把该对象上的存取权限授予其他用户。

5.拥有DBA权限的用户是系统中的超级用户,可以创建新的用户、创建模式、创建基本表和视图等;DBA 拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户。

以上说明可以用下表来总结。

注意:CREATE USER语句不是SQL标准,因此不同的关系数据库管理系统的语法和内容相差甚远。这里介绍该语句的目的是说明对于数据库模式这一类数据对象也有安全控制的需要,也是要授权的。


文章转载自凯哥的故事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论