DBA帐户“ X”拥有一个原始的“ A”表 ,并向第三方帐户“ Y”提供一个触发的临时“ B”表,该表已插入“ A”表中。 因为您不能为“ Y”赋予表“ A”的DML特权 当“ B”表的所有者创建为“ X”时 “ B”的所有者如何在“ Y”中隐藏“ X”?
如果我无法隐藏, “ A”表的所有者为“ X”, “ B”表的所有者为“ Y”, 在不将“ A”表的DML特权授予“ Y”的情况下, 仅授予“ Y”“ B”表的DML特权, 我想在“ B”表上创建一个插入触发器。在表格中插入“ A”。 也就是说,无论如何“ Y”都不应该知道“ X”的名称。有可能吗?
答案 0 :(得分:1)
创建触发器ON Y.B
,但由X
拥有触发器 。这样,只有触发器才能执行INSERT
,而用户Y
无法访问其他表。
此代码创建触发器:
create or replace trigger x.b_trg
after insert on y.b
for each row
begin
insert into x.a values(:new.some_column);
end;
/
以下是用户Y
能够插入Y.B
(然后被复制到X.A
)但不能直接插入X.A
的示例。 / p>
SQL> insert into y.b values(1);
1 row created.
SQL> insert into x.a values(2);
insert into x.a values(2)
*
ERROR at line 1:
ORA-00942: table or view does not exist
上述解决方案可以阻止访问,但不能完全“隐藏”它。在Oracle中,隐藏代码很困难。我们可以混淆代码,但是使用在线实用程序可以很容易地消除混淆。还有其他方法可以使用数据字典找出依赖性。