【问题标题】:To other users, How to hide the Oracle object owner of a table对于其他用户,如何隐藏表的 Oracle 对象所有者
【发布时间】:2019-11-08 23:34:21
【问题描述】:

有一个原始的“A”表归 DBA 帐户“X”所有 , 并提供一个触发的临时“B”表,插入“A”表给第三方账户“Y”。 因为你不能给“Y”表“A”的DML权限 当“B”表的所有者被创建为“X”时 “B”的所有者如何将“X”从“Y”中隐藏起来?

如果我无法隐藏, “A”表的所有者是“X”, “B”表的所有者是“Y”, 在不将“A”表的 DML 权限授予“Y”的情况下, 只给“Y”“B”表的DML权限, 我想在“B”表上创建一个插入触发器。在表格中插入“A”。 也就是说,无论如何“Y”都不应该知道“X”的名字。有可能吗?

【问题讨论】:

    标签: oracle oracle11g permissions oracle10g database-administration


    【解决方案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 的示例。

    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 中隐藏代码很困难。我们可以混淆代码,但这种混淆很容易通过在线实用程序逆转。还有其他方法可以使用数据字典找出依赖关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2015-06-29
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      相关资源
      最近更新 更多