(三)控制数据访问的 SQL 语句
GBase 8t 提供 GRANT 和 REVOKE 语句,分别用于授予和撤销用户的权限。GRANT 和 REVOKE 语句还用于将角色和诸如 SETSESSIONAUTH 这样的安全管理选项授予用户。
当将权限授予 PUBLIC 时,意味着系统中的所有用户都获得了这个权限。类似地,当从 PUBLIC 撤销权限时,从系统中所有用户剥夺授予给 PUBLIC 的权限。不过,依旧保留单独授予他们的权限,或通过角色授予他们的权限。仅权限的授予者或数据库管理员可以撤销权限。
GRANT 语句的 WITH GRANT OPTION 子句用于指示权限的被授予者可转而将该权限授予其他用户。WITH GRANT OPTION 子句不适用于数据库级权限,但适用于针对所有其他 SQL 对象的权限。
GRANT 语句的 AS grantor 子句允许拥有 DBA 权限的用户作为由 grantor 指示的另一用户将权限授予用户。这意味着,现在只有该 grantor 可以撤销这些权限,也就是说,grantor 成了该权限的授予者。使用 AS grantor 子句的另一场景是,当对象的所有者是操作系统不承认的用户时。在此场景下,拥有 DBA 权限的用户不可将对此对象的权限授予用户。
不可撤销自己的权限。如果要撤销以 GRANT 语句的 AS grantor 子句授予的权限,则必须拥有 DBA 权限,且必须使用 REVOKE 语句的 AS revoker 子句,在此,revoker 必须与 GRANT 语句中的 grantor 相同。
对于其他对象对其有依赖的那些对象,比如,表和超类型,适用于以 REVOKE 语句的 CASCADE 或 RESTRICT 子句来撤销权限。例如,仅拥有对基础表的 SELECT 权限的用户创建视图。如果在创建视图之后,撤销对该表的 SELECT 权限,则视图被删除。这等同于使用 REVOKE 语句的 CASCADE 子句。而如果在撤销表的 SELECT 权限时,使用 REVOKE 语句的 RESTRICT 子句,则撤销语句返回一个错误。
如果撤销用户对超类型的 UNDER 权限,则删除由该用户创建的所有子类型。这等同于使用 REVOKE 语句的 CASCADE 子句。而如果使用 REVOKE 语句的 RESTRICT 子句,则撤销语句返回一个错误。
导致 REVOKE 语句的 CASCADE 子句失败的其他依赖性还有:
前面多次提到“对象的所有者”,汇总说明如下:
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞3
添加新评论2 条评论
2018-01-31 17:37
2018-01-31 14:20
jxq: @DB-TrendSetter GBase 目前市场很好,在一些行业已经开始替代国外数据库产品。 希望 GBase 能为数据库国产化目标做出更大的贡献。