PL/SQL 手动查询中的权限不足可能

Posted

技术标签:

【中文标题】PL/SQL 手动查询中的权限不足可能【英文标题】:PL/SQL insufficient privileges within a query manually possible 【发布时间】:2017-05-11 13:43:52 【问题描述】:

我需要做这个任务,并更新这个有很多行的表。

此表有 2 列:

FOOBAR

我有 FOO 作为 PK,我知道这些值,它们都是数字,但我没有任何值。

我可以手动运行每个查询而不会出现任何问题,但是我制作了这个 PL/SQL,因此一旦我需要在另一个查询中查找 BAR 值,它就会自动运行而不会出现任何问题。

create or replace procedure FxB_pro
IS
  tmpFIELD NUMBER := 0; 
  i NUMBER := 0;
  cursor c1 is  
    SELECT * FROM FooXBar WHERE BAR IS NULL;
BEGIN

  FOR CTUpdate IN c1
  LOOP 
    BEGIN
      SELECT t5.bar INTO tmpFIELD FROM table_1 t1, table_2 t2, table_3 t3, table_4 t4, table_5 t5, table_6 t6
      where t1.fielda_id = t2.fielda_id
      and t2.fielda_id = t3.fielda_id
      and t3.fieldb_id = t4.fieldb_id 
      and t3.fieldb_id = t6.fieldb_id
      and t4.fieldd_id = t5.fieldc_id
      and t1.fieldc = CTUpdate.FOO
      and rownum = 1;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        tmpFIELD :=null;
    END;

    UPDATE FooXBar set BAR = tmpFIELD where FOO=CTUpdate.FOO;

    i := i+1;

    IF mod(i, 1000) = 0 THEN    -- Commit every 1000 records
      COMMIT;
    END IF;

  END LOOP; 
  COMMIT;
END;

我已经在我正确的测试环境中对此进行了测试,PL/SQL 已创建并运行,但是当我要在 Production 中运行它时,我在 Select wich put 中出现此错误tmpFIELD 中的值:

Erro(12,11): PL/SQL: SQL Statement ignored
Erro(12,143): PL/SQL: ORA-01031: insufficient privileges

我不知道为什么会这样,有人可以帮我吗?

【问题讨论】:

错误很明显-您在生产环境中没有特权-您没有读取这些表的权限(我假设;没有“特权”可以分配给局部变量)。请注意,默认情况下,权限是“定义者”(创建过程的用户)的权限;如果需要,您还可以使用调用者的权限运行该过程 - 您可以在文档中阅读所有相关信息。 docs.oracle.com/cd/E21901_01/timesten.1122/e21639/… 即使我在 DB 中使用 adm 用户并且可以单独运行查询?我现在看到了,谢谢。我要搜索这个。 【参考方案1】:

您的权限是通过 ROLE 分配的。 这对直接 SQL 很好,但不适用于 PL/SQL。

您需要直接为您的用户获取权限。

在测试预先设置的 PL/SQL 查询时

 set role none;

这将停用通过ROLE 获得的特权,并显示在 PL/SQL 中运行可能出现的问题。

【讨论】:

谢谢,我不知道这个角色不适用于 PL/SQL。 你也可以使用角色,但是你需要角色WITH GRANT OPTION。这实际上是有道理的,因为该过程会访问该表,但是您可以将对该过程的访问权限授予其他用户,从而让他们间接访问该表。

以上是关于PL/SQL 手动查询中的权限不足可能的主要内容,如果未能解决你的问题,请参考以下文章

在Jmeter for Oracle Application中获得不足的权限错误

ORA-01031 新建用户创建视图提示权限不足

appcmd.exe 权限不足,无法读取配置文件

linux下ORACLE 11G 安装 说权限不足

42501:在 Postgresql 中查询时出现特权不足错误

ORA-01031: 创建包时权限不足