【问题标题】:How do I execute a procedure in a package I just created in another schema?如何在我刚刚在另一个模式中创建的包中执行过程?
【发布时间】:2014-11-15 03:13:03
【问题描述】:

设置:我有两棵在 Oracle 11g 上运行的脚本树 - 一组确保正确的实例配置以及所有 DBA 代理帐户都可以连接到 dbadmin 帐户,而其他集合构建和修改我们的数据库环境。

问题:代理到 DBADMIN 帐户,第二组脚本运行良好,除了有一个:数据预填充。允许加载数据的过程在适当的模式下创建就好了,如果作为 SYS AS SYSDBA 运行,加载数据的脚本运行得很好,但是当我尝试在创建过程后立即以 DBADMIN 运行它时它调用每次通话我都会收到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 身份重新登录授予它? (这里的重点是在最初的“运行此脚本树”之外有零手动步骤,并且在使用 SYS AS SYSDBA 时只有一次。)

【问题讨论】:

    标签: oracle stored-procedures database-permissions


    【解决方案1】:

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

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

    【讨论】:

    • 天啊!我不知道我是怎么错过的!这比在 SYS 中创建一个只有 DBADMIN 可以调用的授予任意权限的过程要好得多。 (:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2016-11-12
    相关资源
    最近更新 更多