1
数据库原理与应用技术
1.7.4.4 6.4.4 SQL中的安全性控制
6.4.4 SQL中的安全性控制

SQL有两种安全机制:一种是视图机制,用于对不同的用户定义不同的视图,使用户只能看到与自己有关的数据,这种机制对无权用户屏蔽数据,从而提供了一定的安全性。一种是授权子系统,通过授权和收回权限,使用户只能在指定范围内对数据库进行操作,以有效避免用户的越权行为,从而保证数据库的安全性。

1. 视图机制

视图是从一个或几个基本表中导出的表,是虚表,仅从概念上来说,视图和基本表是相同的。视图定义后可以像基本表一样用于查询和删除,并且用户可以在视图上再定义视图,数据库不存储视图的数据,只存储其定义(存在数据字典中),但其更新操作(插入、删除、修改)会受到限制。

视图机制把用户使用的数据定义在视图中,这样,用户就不能使用视图定义以外的其他数据,从而保证数据库的安全性。

2. 授权子系统

SQL使用GRANT语句为用户授予使用关系和视图的权限,其语法格式为:

GRANT <权限表> ON <数据库元素> TO <用户名表> [WITH GRANT OPTION]

权限表中的权限共有6种。

(1) SELECT:为用户提供选择(读)数据行的能力。

(2) INSERT:为用户提供插入数据行的能力。

(3) UPDATE:为用户提供选择修改数据行的能力。

(4) DELETE:为用户提供选择删除数据行的能力。

(5) REFERENCES:用户定义新关系时,如果用户没有引用表的SELECT权限,则允许引用外部关键字。

(6) EXECUTE:为用户提供执行指定存储过程的能力。

如果权限表中包括所有以上6种权限,则可以用关键字“ALL PRIVILEGES”代替。

数据库元素可以是基本表或视图的名字。

“WITH GRANT OPTION”表示获得权限的用户可以将其获得的权限有选择地、动态地转授给其他用户,即用户具有传递权限。例如,

GRANT SELECT,UPDATE ON student TO Tom,Peter WITH GRANT OPTION

该语句表示将对表student的SELECT、UPDATE操作权限授予用户Tom和Peter,Tom和Peter可以将这些权限转授给其他用户。再如,

GRANT INSERT(sex,birth)ON student TO Jerry WITH GRANT OPTION

该语句表示将对表student插入sex、birth值的操作权限授予用户Jerry,Jerry可以将这些权限转授给其他用户。同样从安全的角度考虑,在必要的情况下,DBA和授权者必须将授予出去的一些权限收回,权限收回使用REVOKE语句,其语法格式为:

REVOKE <权限表> ON <数据库元素> FROM<用户名表>

例如,收回用户Tom、Peter对student表的SELECT、UPDATE权限,可表示为:

REVOKE SELECT,UPDATE ON Student FROM Tom,Peter

例如,收回用户Jerry对student表插入sex、birth值的权限,可表示为:

REVOKE INSERT(Sex,Birth) ON Student FROM Jerry

权限收回时,通常都会引起收回连锁效应,即若用户U1授权给用户U2,用户U2授权给用户U3,则U1收回授予U2的权限,而系统会自动收回U3的权限。