【问题标题】:ORA-01031: insufficient privileges -- package procedureORA-01031: 权限不足 -- 包程序
【发布时间】:2019-05-29 03:27:35
【问题描述】:

在 oracle 中,当我执行我的包时,我得到了错误:

ORA-01031: 权限不足

我的用户具有 dba 管理员角色。

mySchema 中的 myPackage。但表的架构不同。

我尝试了下面的脚本,但没有解决我的问题。

grant execute on mySchema.myPackage to otherSchema;

感谢您的关注。

execute
mySchema.myPackage.disabledTableConstraint(otherSchema.table_Cons);

【问题讨论】:

  • 这不仅仅是授予打包权限。您需要查看您从package 使用的procedure 是否有任何需要显式许可的架构对象。
  • PL/SQL 不使用角色(除非您使用调用者权限编译它,这是一个相当专业的选项,不建议用于普通代码),因此包所有者具有的任何 DBA 管理员角色都不存在在运行时。

标签: oracle plsql


【解决方案1】:

通过角色授予的权限在 PL/SQL 中并不重要。默认情况下,包以定义者的权限执行,这意味着它们以拥有模式的权限执行。

看起来mySchema 正在尝试禁用otherSchema 中的约束,所以这基本上就像您以mySchema 登录并尝试这样做:

alter table otherSchema.someTable disable constraint myconstraint;

听起来mySchema 没有权限对otherSchema 执行此操作。你可以:

  1. ALTER TABLE 权限从otherSchema 授予mySchema。您必须逐个表地执行此操作。
  2. ALTER ANY TABLE 系统权限授予mySchema。这可能很危险。
  3. 使用AUTHID CURRENT_USER 子句赋予过程调用者的权限。这将使过程以调用它的架构的权限运行,在本例中为otherSchema

见:Managing Security for Definer's Rights and Invoker's Rights

【讨论】:

  • 我尝试了第二个选项。 otherschema 或 mySchema 都具有更改任何表权限。但不工作。
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 2020-12-10
  • 1970-01-01
相关资源
最近更新 更多