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
这里你可以找到一些更有趣的信息:
我想在用户 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
这里你可以找到一些更有趣的信息: