代码之家  ›  专栏  ›  技术社区  ›  tryingHard

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

  •  0
  • tryingHard  · 技术社区  · 8 年前

    我想对用户执行代码 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 .

    我从用户创建了过程 国际直拨电话 以下内容:

    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 回复  |  直到 8 年前
        1
  •  4
  •   Ikrom    8 年前

    根据您的注释,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