GBASE南大通用数据库执行例程的 DBA 权限

如果 DBA 使用 DBA 关键字创建例程,则数据库服务器自动地仅将 Execute 权限授予有 DBA 权限的其他用户。然而,DBA 可显式地将 DBA 例程上的 Execute 权限授予没有 DBA 权限的用户。 

当用户执行以 DBA 关键字注册了的例程时,该用户假设在例程持续期间持有 DBA 权限。 如果没有 DBA 权限的用户运行 DBA 例程,则数据库服务器隐式地将临时的 DBA 权限 授予调用者。在退出 DBA 例程之前,数据库服务器隐式地撤销该临时的 DBA 权限。

执行 DBA 例程的用户拥有在运行该 DBA 例程期间创建的对象, 除非例程中的语句显式 地命名其他用户作为所有者。 例如,假设 tony 以 DBA 关键字注册 promo() 例程,如下:

虽然 tony 拥有该例程,但如果 marty 运行它,那么 marty 拥有 catalog 表,但由于用 户 libby 的名称限定 libby.mailers 表名称,使得她成为该表的所有者,因此它拥有该表。

被调用的例程未继承 DBA 权限。如果 DBA 例程执行未以 DBA 关键字创建了的例程, 则 DBA 权限不影响被调用的例程。 

如果未以 DBA 关键字注册的例程调用 DBA 例程,则调用者对于被调用的 DBA 例程必 须有 Execute 权限。该 DBA 例程内的语句执行如同任何 DBA 例程内的语句一样。 

下列示例展示当 DBA 与非 DBA 例程相互作用时发生的情况。假设过 程 dbspc_cleanup() 执行另一过程 clust_catalog()。还假设 clust_catalog()创建索引, 且 clust_catalog() 的 SPL 源代码包括下列语句:

DBA 过程 dbspc_cleanup() 以下列语句调用其他例程:

假设 tony 注册了 dbspc_cleanup() 作为 DBA 过程,而未以 DBA 关键字注 册 clust_catalog(),如下列语句所示:

假设用户 marty 运行 dbspc_cleanup()。由于通过非 DBA 例程创建索引 c_clust_ix,因此, 同时拥有两个例程的 tony 也拥有 c_clust_ix。相对地,如果 clust_catalog() 为 DBA 过程, 则 marty 会拥有索引 c_clust_ix,如下列注册和授权语句所示:

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值