对于其他用户,如何隐藏表的Oracle对象所有者

时间:2019-06-27 01:09:21

标签: oracle oracle11g permissions oracle10g database-administration

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”的名称。有可能吗?

1 个答案:

答案 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中,隐藏代码很困难。我们可以混淆代码,但是使用在线实用程序可以很容易地消除混淆。还有其他方法可以使用数据字典找出依赖性。