Oracle 12c触发器创建权限不足

时间:2018-06-20 14:07:47

标签: database oracle privileges

我要在用户IDK上执行代码:

CREATE OR REPLACE TRIGGER sal_trig
  AFTER UPDATE OF status ON TAB1
  FOR EACH ROW
  WHEN (new.status = 'ZAK')
CALL log_sal(1, 5, 8);

我有以下补助:

GRANT CREATE PROCEDURE TO IDK;
GRANT CREATE SEQUENCE TO IDK;
GRANT CREATE TABLE TO IDK;
GRANT CREATE TRIGGER TO IDK;
GRANT CREATE TYPE TO IDK;
GRANT UNLIMITED TABLESPACE TO IDK;
GRANT SELECT ON TAB1 TO IDK;

我需要更多的赠款吗? 我不会在TAB1上进行更新/删除/插入。 我得到error: not sufficient privileges

我从用户IDK创建了过程:

CREATE OR REPLACE PROCEDURE log_sal (
  emp_id NUMBER,
  old_sal NUMBER,
  new_sal NUMBER
)
AS LANGUAGE JAVA
NAME 'CaseWatch.logSal(int, float, float)';

1 个答案:

答案 0 :(得分:4)

根据您的注释,由不同用户创建的TAB1表,因此该表处于不同架构中,这是主键。 当您想授予特权以不同模式在表上创建触发器时,您需要使用:

  

GRANT CREATE ANY TRIGGER TO IDK;

CREATE TRIGGER =>实际上授予了在被授予者的架构中创建数据库触发器的权限,在您的情况下,如果IDK创建了TAB1,那么此特权就足够了。

关于CREATE ANY TRIGGER,您可以在这里找到更多有趣的信息:

  1. https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9013.htm
  2. Grant create any trigger vs grant create trigger