繁体   English   中英

如何在我刚刚在另一个模式中创建的包中执行过程?

[英]How do I execute a procedure in a package I just created in another schema?

设置:我有两个在Oracle 11g上运行的脚本树 - 一个集合确保正确的实例配置,并且所有DBA代理帐户都在那里连接到dbadmin帐户,另一个集合构建和修改我们的数据库环境。

问题:进入DBADMIN帐户,第二组脚本运行得很好, 除了一个:数据预填充。 允许加载数据的过程在适当的模式下创建就好了,如果以SYS AS SYSDBA的形式运行,加载数据的脚本运行得很好,但是当我尝试在创建过程后立即将其作为DBADMIN运行时, 它调用 I get PLS-00904: insufficient privilege to access object schema.package每个调用的PLS-00904: insufficient privilege to access object schema.package 我甚至没有脚本GRANT EXECUTE ON schema.package TO DBADMIN因为那(当然)生成了预期的ORA-01749: you may not GRANT/REVOKE privileges to/from yourself错误。

更简单地说:

(作为DBADMIN :)

 ...
CREATE OR REPLACE PACKAGE BODY other_schema.package_name IS
 ...
PROCEDURE add_data(...)
 ...

(成功,并且可以正常工作)(稍后,在由同一父脚本调用的另一个脚本中,仍然作为DBADMIN :)

BEGIN
   other_schema.package_name.add_data(...);
   ...

(提出上面给出的PLS-00904 - 权限不足)

关于如何给DBADMIN帐户EXECUTE访问它尚未创建的包的任何想法,或者DBADMIN如何在不停止整个脚本流的情况下获得访问权限,注销并以SYS AS SYSDBA格式返回GRANT它? (这里的重点是在初始“运行此脚本树”之后有ZERO手动步骤,并且在使用SYS AS SYSDBA时只有一次预先安装。)

您可以授予DBADMIN EXECUTE ANY PROCEDURE权限。 这将允许它执行任何运行任何其他用户拥有的程序的过程。

像其他任何程序一样,它非常强大,不应轻易授予。 (事实上​​,它是最强大的任何特权之一)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM