表级权限,也称为表权限,指定用户或角色可在数据库中的表或视图上执行哪些操作。您可使用同
义词来指定您在其上授予或取消表权限的表或视图。
可在表或视图的列的子集上授予 Select、Update 和 References 权限,但仅可对所有列取消权限。
对于在定义同一用户拥有的视图的 SELECT 语句中引用的表,如果从用户取消 Select 权限,则删
除那个视图,除非它还包括来自另一数据库中表的列。
对于 CREATE EXTERNAL TABLE 语句已经在当前的数据库中注册了的表对象,仅支持 Select 权
限和 Insert 权限;不可授予或取消其他表或列访问权限。
使用下列语法来指定从一个或多个用户或角色取消哪些表级权限:
表级权限;
如果用户从两个不同的授予者收到相同的权限,且一授予者取消该权限,则被授予者仍有该权限,
直到第二个授予者也取消该权限为止。例如,如果您和 DBA 都将对您的表的 Update 权限授予
ted,则您和 DBA 必须都取消 Update 权限来阻止 ted 更新您的表。
然而,如果用户 ted 通过角色或作为 PUBLIC 持有相同的权限,则此 REVOKE 操作不能阻止
ted 行使 Update 权限。
何时在 GRANT 之前使用 REVOKE
您可使用 REVOKE 与 GRANT 的组合来以特定的用户替代 PUBLIC 作为被授予者,并移除对一
些列的表级权限。
以指定的用户替代 PUBLIC
如果表所有者将权限授予 PUBLIC,则该所有者不可从任何特定的用户取消同一权限。例如,假设
PUBLIC 对您的 customer 表有缺省的 Select 权限。假设您发出下列语句,尝试阻止 ted 访问您
的表:
REVOKE ALL ON customer FROM ted;
此语句导致 ISAM 错误消息 111,No record found,因为系统目录表(syscolauth 或
systabauth)未包含名为 ted 的用户的表级权限条目。此 REVOKE 操作不阻止 ted 保持所有赋予
PUBLIC 的对 customer 表的表级权限。
要限制表级权限,首先以 PUBLIC 关键字取消该权限,然后将它们重新授予某适当的用户和角色列
表。下列语句从所有用户取消对 customer 表的 Index 和 Alter 权限,然后特定地将这些权限授
予用户 mary:
REVOKE INDEX, ALTER ON customer FROM PUBLIC;
GRANT INDEX, ALTER ON customer TO mary;