• 沒有找到結果。

上述查询语句的运行结果如图 3. 27 所示。

3.5 数据控制

SQL 定义完整性约束条件的功能主要体现在 CREATE TABLE 语句和 ALTER TABLE 语句中,可以在这些语句中定义主键、取值唯一的列、不允许空值的列、外键

(参照完整性)及其他一些约束条件。在 SQL 中,数据控制功能包括事务管理功能和 数据保护功能,即数据库的恢复、并发控制、数据库的安全性和完整性控制等。本节将 主要介绍 SQL 的安全性控制功能,由于某个用户对某类数据具有何种操作权力是个需 求问题而不是技术问题。数据库管理系统的功能是保证这些决定的执行。因此,DBMS 必须具备以下功能:

将授权的决定告知系统,这是由 SQL 的 GRANT 和 REVOKE 语句来完成的。

将授权的结果存入数据字典。

当用户提出操作请求时,根据授权情况进行检查,以决定是否执行操作请求。

3.5.1 GRANT 语句

SQL 用 GRANT 语句向用户授予操作权限,GRANT 语句的一般格式为:

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

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

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

[WITH GRANT OPTION]

提示:上述语句的语义即将指定操作对象的指定操作权限授予指定的用户。

对于不同类型的操作对象有不同的操作权限,对属性列和视图的操作权限包括查询

(SELECT)、插入(INSERT)、修改(UPDATE)、删除(DELETE)以及这 4 种权限 的总和(ALLPRIVILEGES)。对基表的操作权限包括查询、插入、修改、删除、修改 表(ALTER)和建立索引(INDEX)以及这六种权限的总和。对数据库可以有建立表

(CREATETAB)的权限,该权限属于 DBA,可由 DBA 授予普通用户,普通用户拥有 此权限后可以建立基表,基表的所有者(Owner)拥有对该表的一切操作权限。

常见的操作权限如表 3.4 所示。

表 3.4 不同对象类型允许的操作权限

对象 对象类型 操作权限

属性列 TABLE COLUMN SELECT、INSERT、UPDATE、DELETE、ALL PRIVILEGES 视图 TABLE VIEW SELECT、INSERT、UPDATE、DELETE、ALL PRIVILEGES

基表 TABLE SELECT、INSERT、UPDATE、DELETE、ALTER、INDEX、

ALL PRIVILEGES

数据库 DATABASE CREATETAB

接受权限的用户可以是一个或多个具体用户,也可以是 PUBLIC,即全体用户。如 果指定了 WITH GRANT OPTION 子句,则获得某种权限的用户还可以把这种权限再授 予其他的用户。如果没有指定 WITH GRANT OPTION 子句,则获得某种权限的用户只 能使用该权限,但不能传播该权限。

以下将通过几个例子来说明 GRANT 语句的使用,由于以下例子中的用户 User1 至 User8 均为用户示意,故不再给出结果示意图,读者可自行创建用户演练。

【例 3.42】把查询 IT_EMPLOYEES 表的权限授给用户 User1。

GRANT SELECT

ON TABLE IT_EMPLOYEES TO User1;

【例 3.43】把对 IT_EMPLOYEES 表和 JOBS 表的全部操作权限授予用户 User2 和 User3。

GRANT ALL PRIVILEGES

ON TABLE IT_EMPLOYEES,JOBS TO User2,User3;

【例 3.44】把对表 DEPARTMENT 的查询权限授予所有用户。

GRANT SELECT

ON TABLE DEPARTMENT TO PUBLIC;

【例 3.45】把查询 IT_EMPLOYEES 表和修改雇员编号的权限授给用户 User4。

GRANT UPDATE(EMPLOYEE_ID),SELECT

ON TABLE IT_EMPLOYEES TO User4;

这里实际上要授予 User4 用户的是对基表 IT_EMPLOYEES 的 SELECT 权限和对属 性列 EMPLOYEE_ID 的 UPDATE 权限。授予关于属性列的权限时必须明确指出相应属 性列名。

【例 3.46】把对表 DEPARTMENT 的 INSERT 权限授予 User5 用户,并允许将此权 限再授予其他用户。

GRANT INSERT

ON TABLE DEPARTMENT TO User5 WITH GRANT OPTION;

执行此 SQL 语句后,User5 不仅拥有了对表 DEPARTMENT 的 INSERT 权限,还 可以传播此权限,即由 User5 用户使用上述 GRANT 命令给其他用户授权。

FROM<用户> [,<用户>]…;

【例 3.50】把用户 User4 修改雇员编号的权限收回。

REVOKE UPDATE(EMPLOYEE_ID)

ON TABLE IT_EMPLOYEES

在例 3.47 中,User5 将对 DEPARTMENT 表的 INSERT 权限授予了 User6,而 User6 又将其授予了 User7。执行例 3.52 的 REVOKE 语句后,DBMS 在收回 User5 对 DEPARTMENT 表 的 INSERT 权 限 的 同 时 , 还 会 自 动 收 回 User6 和 User7 对 DEPARTMENT 表的 INSERT 权限。也就是说,收回权限的操作会级联下去。但如果 User6 或 User7 还从其他用户处获得对 DEPARTMENT 表的 INSERT 权限,则他们仍具 有此权限,系统只收回直接或间接从 User5 处获得的权限。

相關文件