发布网友 发布时间:34分钟前
共1个回答
热心网友 时间:34分钟前
当DBA使用DBA关键字创建例程,数据库服务器将Execute权限自动授予具有DBA权限的其他用户。DBA也能显式地向无DBA权限用户授予DBA例程上的Execute权限。用户在执行以DBA关键字注册的例程时,被认为在执行期间持有DBA权限。若无DBA权限的用户运行DBA例程,服务器会临时授予DBA权限。在退出例程后,服务器撤销该权限。
执行DBA例程的用户在运行期间拥有创建的对象,除非例程中明确指定了其他用户作为所有者。例如,如果Tony使用DBA关键字注册了名为promo()的例程,其他用户在执行此例程时可能获得不同对象的所有权。
被调用的例程不继承DBA权限。如果DBA例程执行未以DBA关键字创建的例程,则DBA权限不影响被调用例程。若非DBA例程调用DBA例程,调用者必须有Execute权限,DBA例程内部的语句执行如同其他DBA例程。
以下示例展示DBA与非DBA例程交互的情况。假设dbspc_cleanup()过程调用clust_catalog()过程,而clust_catalog()创建索引。clust_catalog()的SPL源代码包括DBA权限的使用。dbspc_cleanup()过程以下列语句调用其他例程:
如果Tony以DBA关键字注册了dbspc_cleanup(),但clust_catalog()未以DBA关键字注册,则同时拥有两个例程的Tony也拥有创建的索引。相反,如果clust_catalog()是DBA过程,无DBA权限的用户Marty在运行dbspc_cleanup()时将拥有索引。