Oracle 12c 没有足够的触发器创建权限

Oracle 12c not sufficient privileges on trigger creation

我想在用户 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 上获得 update/delete/insert。 我得到 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)';

根据您的评论,TAB1 table 由不同的用户创建,因此 table 处于不同的架构中,这是主键。 当您想授予在不同架构中的 table 上创建触发器的权限时,您需要使用:

GRANT CREATE ANY TRIGGER TO IDK;

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

关于CREATE ANY TRIGGER这里你可以找到一些更有趣的信息:

  1. https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9013.htm