撤销用户和角色权限
使用 REVOKE 语句和 ALTER USER 语句可以执行特定的权限撤销操作。当您撤销系统或对象权限时,请注意撤销权限的级联效应。
撤销系统特权
ALTER USER 语句可以撤销系统特权。
撤销对象特权
您可以使用 REVOKE 语句撤销多个对象权限、代表对象所有者的对象权限、列选择性对象权限和 REFERENCES 对象权限。
撤销权限的连锁效应
与 DDL 操作相关的撤销对象特权没有级联效应,但对象特权撤销有级联效应。
撤销系统特权
在KingbaseES中,使用 ALTER USER 语句撤销用户特权。任何具有系统特权用户都可以撤销任何其他数据库用户或角色的特权。 撤销者不必是最初授予特权或角色的用户。 具有GREATEROLE的用户可以撤销任何角色。例如,撤销test用户的CREATEROLE权限:
ALTER USER test NOCREATEROLE;
撤销对象权限
关于对象权限的撤销
要撤销对象特权,您必须满足相应的要求。
撤销多个对象特权
REVOKE 语句可以撤销对一个对象的多个权限。
代表对象所有者撤销对象特权
GRANT ANY OBJECT PRIVILEGE 系统特权可用于撤销对象所有者为授予者的任何对象特权。
撤销列选择性对象特权
特定于列的操作的 GRANT 和 REVOKE 操作具有不同的权限和限制。
撤销 REFERENCES 对象特权
当您撤销 REFERENCES 对象权限时,它会影响外键约束。
关于撤销对象权限
要撤消对象特权,您必须满足相应的要求。这些要求满足以下条件之一:
已向用户或角色授予了对象权限。
用户拥有系统特权,能够代表对象所有者授予和撤消权限
您只能撤销您直接授权的特权。 您不能撤销您授予WITH GRANT OPTION 的其他用户的授权。 但是,有级联效应。 如果授予权限的用户的对象权限被撤销,那么使用 WITH GRANT OPTION 传播的对象权限授予也被撤销。
撤销多个对象特权
REVOKE 语句可以撤销对一个对象的多个权限。
例如,撤销用户 u1 和 u2 对 orders 表的 INSERT和UPDATE权限:
REVOKE INSERT,UPDATE ON orders FROM u1, u2;
例如,撤销u1在orders表上的所有权限:
REVOKE ALL PRIVILEGES ON orders FROM u1 ;
代表对象所有者撤销对象特权
用户只能回收由它直接授出的特权。如果一个用户持有一个带有授予选项的特权并且把它授予给了其他用户,那么被那些其他用户持有的该特权被称为依赖特权。如果第一个用户持有的该特权或者授予选项正在被收回且存在依赖特权,指定CASCADE可以连带回收那些依赖特权,不指定则会导致回收动作失败。这种递归回收只影响通过可追溯到该REVOKE命令的主体的用户链授予的特权。因此,如果该特权经由其他用户授予给受影响用户,受影响用户可能实际上还保留有该特权。
例如,如果用户A 已经把一个带有授予选项的特权授予给了用户B,并且用户B 接着把它授予给了用户C,那么用户A 无法直接从C 收回该特权。反而,用户A 可以从用户B 收回该授予选项并且使用CASCADE 选项,这样该特权会被依次从用户C 回收。对于另一个例子,如果A 和B 都把同一个特权授予给了C,A 能够收回它们自己的授权但不能收回B 的授权,因此C 实际上仍将拥有该特权。
撤销列级权限
您可以撤销对表中的各个列的INSERT、UPDATE、REFERENCES权限。例如,撤销用户u1表orders的ORDERID和ORDERDATE列插入权限:
REVOKE INSERT (orderid,orderdate) ON orders FROM u1;
另外,在回收一个表上的特权时,也会在该表的每一个列上自动回收对应的列特权(如果有)。在另一方面,如果一个角色已经被授予一个表上的特权,那么从个别的列上回收同一个特权将不会生效。
撤销权限的级联效应
与 DDL 操作相关的撤销对象特权没有级联效应,但对象特权撤销有级联效应。
撤销系统权限时的级联效应
当您撤销与 DDL 操作相关的系统特权时,没有级联效应。
撤销对象权限时的级联效果
撤销对象特权会产生级联效应。
撤销系统权限时的级联效应
当您撤销与 DDL 操作相关的系统特权时,没有级联效应。无论授予权限时是否带有转授选项,这都适用。但如果是撤销对象被过程依赖则会有影响,例如,如果撤销用户的 SELECT ANY TABLE 权限,则在重新授权该权限之前,用户模式中包含的依赖此权限的所有过程都无法成功执行。
撤销对象权限时的级联效应
撤销对象特权会产生级联效应。
请注意以下事项:
如果撤销 DML 对象权限,则依赖于 DML 对象权限的对象定义可能会受到影响。例如,存储过程中有对orders的插入操作,如果撤销用户对orders表的插入权限,则该过程将无法成功执行。
当从用户撤销表的 REFERENCES 特权时,由用户定义并需要已删除的 REFERENCES 特权的任何外键完整性约束都将自动删除。例如,假设用户u1被授予对 orders表的CUSTUMERID列的 REFERENCES 权限。u1在orders表中的custumerid列上创建一个外键,该外键引用了custumers表的custumerid列。如果取消了u1对orders表的custumerid列的REFERENCES 权限,那么在同一操作中删除了对orders表中的custumerid列的外键约束。
如果第一个用户持有的该特权或者授予选项正在被收回且存在依赖特权,指定CASCADE可以连带回收那些依赖特权,不指定则会导致回收动作失败。例如,u1 被授予对orders表的查询权限,并将此权限授予 u2。然后,撤销u1的查询权限,此 REVOKE 语句也级联到u2。任何依赖于 u1 和 u2 对该表的查询权限的对象也会受到影响。