南大通用GBase8s 常用SQL语句(188)

本文详细介绍了GBase8s数据库中的权限管理,包括Usage权限、Under权限和例程级权限的授予与撤销。用户需明确权限才能使用UDT,创建ROW类型子类型或执行用户定义的例程。同时,文章提到了在不同环境下创建UDR时Execute权限的默认情况及管理策略。
摘要由CSDN通过智能技术生成

Usage 权限

任何用户都可引用 SQL 语句中的内建的数据类型,但不可引用基于内建的数据类型的 DISTINCT 数据类型。用户定义的数据类型的创建者或 DBA 必须显式地授予对 UDT 的 Usage 权限,包括基于内建的数据类型的 DISTINCT 数据类型。

带有 USAGE ON TYPE 关键字的 REVOKE 移除您稍早授予另一用户、PUBLIC 或角色的 Usage 权限。

下列语句从用户 mark 移除使用 widget 用户定义的类型的权限:

REVOKE USAGE ON TYPE widget FROM mark;

Under 权限

您拥有您创建的任何命名的 ROW 数据类型。如果您想要其他用户能够在此命名的 ROW 类型之下创建子类型,则您必须授予这些用户对于您的命名的 ROW 类型的 Under 权限。如果您稍后想要移除这些用户在该命名的 ROW 类型之下创建子类型的能力,则您必须从这些用户取消 Under 权限。带有 UNDER ON TYPE 关键字的 REVOKE 语句移除您稍早授予这些用户的 Under 权限。

例如,假设您创建了名为 rtype1 的 ROW 类型:

CREATE ROW TYPE rtype1 (cola INT, colb INT);

如果您想要另一名为 kathy 的用户能够在此命名的 ROW 类型之下创建子类型,则您必须将对于此命名的 ROW 类型的 Under 权限授予用户 kathy

GRANT UNDER ON TYPE rtype1 TO kathy;

现在,即使 kathy 不是 rtype1 ROW 类型的所有者,用户 kathy 也可在 rtype1 ROW 类型之下创建另一 ROW 类型:

CREATE ROW TYPE rtype2 (colc INT, cold INT) UNDER rtype1;

如果您稍后想要移除用户 kathy 在 rtype1 ROW 类型之下创建子类型的能力,则请输入下列语句:

REVOKE UNDER ON TYPE rtype1 FROM kathy;

例程级权限

如果您从用户取消对 UDR 的 Execute 权限,则那个用户不可再以任何方式执行那个 UDR。要获取用户可如何执行 UDR 的详细信息,请参阅 例程级权限。

例程级权限

 

元素

描述

限制

语法

routine

用户定义的例程

必须存在

标识符

SPL_routine

SPL 例程

在该数据库中必须为唯一的

标识符

在符合 ANSI 的数据库中,owner 名称必须限定 routine 名称,除非发出 REVOKE 语句的用户为该例程的所有者。

下列示例取消用户 mark 对由 luke 所拥有的 delete_order 例程的 Execute 权限:

REVOKE EXECUTE ON ROUTINE luke.delete_order FROM mark;

        

在 GBase 8s 中,任何您授予 Execute 权限的取反函数都需要单独的、显式的 REVOKE 语句。

当您在任何下列环境之下创建 UDR,都不会缺省地授予 PUBLIC Execute 权限。因此,在您可取消它之前,您必须显式地授予 Execute 权限:

  1. 您在符合 ANSI 的数据库中创建 UDR。
  2. 您有 DBA 权限且在 CREATE 关键字之后指定 DBA 来将 Execute 权限限定给拥有 DBA 数据库级权限的用户。
  3. NODEFDAC 环境变量设置为 yes 来防止 PUBLIC 收到任何未被显式地授予的权限。

但如果您在没有任何那些条件生效的情况下创建 UDR,则 PUBLIC 可无需 GRANT EXECUTE 语句即可执行您的 UDR。要限定谁可执行您的 UDR,请通过 FROM PUBLIC 取消 Execute 权限,并将它授予用户(请参阅 用户列表)或角色(请参阅 角色名称)。

在 GBase 8s 中,如果两个或多个 UDR 有相同的名称,则请从此列表使用关键字来指定用户列表可不再执行那些 UDR 中的哪些。

关键字              防止用户执行的 UDR

SPECIFIC           通过 specific name 标识的 UDR

FUNCTION         任何带有指定的 routine name 的函数(以及与 routine 参数列表相匹配的参数类型,如果指定的话)

PROCEDURE        任何带有指定的 routine name 的过程(以及与 routine 参数列表相匹配的参数类型,如果指定的话)

ROUTINE          带有指定的 routine name 的函数或过程(以及与 routine 参数列表相匹配的参数类型,如果指定的话)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值