对同义词的授予命令会引发 ORA-01775 错误

Grant command on a synonym throws ORA-01775 error

我正在尝试在触发器上创建同义词,然后尝试为特定用户授予对同义词的全部授权。它抛出一个错误: ORA-01775: 同义词循环链

下面是我的代码。谁能指出我错误的正确方向!

create table emp(emp_name varchar(20));
create or replace trigger trg_test
before insert on emp
begin
null;
end;

create or replace public synonym  trg_test for trg_test;
GRANT ALL ON trg_test TO USER1;

如果您执行了以下任务,则会收到错误消息:

CREATE OR REPLACE public SYNONYM TRG_TEST FOR TRG_TEST;
GRANT ALL ON TRG_TEST TO USER1; --this will give error

Error:
GRANT ALL ON TRG_TEST TO USER1
Error report -
ORA-01775: looping chain of synonyms
01775. 00000 -  "looping chain of synonyms"
*Cause:    
*Action:

如果按照@Frank Schmitt 的建议,将模式名称放在同义词触发器名称之前,那么您也会得到相同的错误:

CREATE OR REPLACE public SYNONYM TRG_TEST FOR schema.TRG_TEST;
GRANT ALL ON TRG_TEST TO USER1; --this will give error

Error:
GRANT ALL ON TRG_TEST TO USER1
Error report -
ORA-01775: looping chain of synonyms
01775. 00000 -  "looping chain of synonyms"
*Cause:    
*Action:

让我澄清一下,此错误消息具有误导性。

您可以在 oracle 中创建几乎所有对象的同义词,无论其类型如何(table、视图、序列等)。 Oracle 不知道同义词后面的对象类型是什么。

现在,在我们的例子中,如果 Oracle 知道 GRANT 将在 TRIGGER 上执行,那么它将给出不同的错误。

-- actual error
drop public synonym TRG_TEST;
GRANT ALL ON TRG_TEST TO USER1;

Error starting at line : 16 in command -
GRANT ALL ON TRG_TEST TO USER1
Error report -
ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"
*Cause:    
*Action:

所以结论是: 你不能为 trigger 提供资助。哪有这回事。 Triggers 每当在创建 trigger 的 table 上完成触发事件时自动触发。您只需要授予对 table.

的权限

干杯!!