对同义词的授予命令会引发 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.
的权限
干杯!!
我正在尝试在触发器上创建同义词,然后尝试为特定用户授予对同义词的全部授权。它抛出一个错误: 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.
干杯!!