【问题标题】:Oracle automatic GRANT permissionsOracle 自动授予权限
【发布时间】:2013-01-05 20:19:45
【问题描述】:

我正在尝试分析 DBMS 提供的安全性,以下场景简要说明了我正在寻找的内容。

//当前连接数据库的用户是“master”

// 1. 创建新用户的基本步骤

CREATE USER slave
IDENTIFIED BY SlavePassword
DEFAULT TABLESPACE SomeTablespace;

// 2. 为新用户授予基本角色

GRANT CONNECT TO slave;
GRANT RESOURCE TO slave;

// 3. 新用户“slave”现已连接数据库

// 用户“slave”创建数据库对象(表、过程等),并授予系统其他用户的权限

如何让创建者“master”在没有得到“slave”用户明确许可的情况下,获得创建的用户“slave”拥有或将来将拥有的任何权限?

我知道从属可以将他的任何权限授予其他用户,但是是否有特殊权限允许其他用户获得“从属”将来拥有的权限?

我正在使用 Oracle,我不确定其他 DBMS 是否允许这种情况。

【问题讨论】:

  • 您可能希望避免使用 RESOURCE。来自Database Security Guide:“注意:Oracle 建议您为数据库安全设计自己的角色,而不是依赖此角色。Oracle 数据库的未来版本可能不会自动创建此角色。”

标签: database oracle database-schema database-management


【解决方案1】:

使用 Database Vault 执行此操作的唯一方法。如果您为“从属”用户创建一个领域并将“主”用户添加到该领域,那么主用户将拥有该架构中所有对象的权限。本教程来自 OTN

http://apex.oracle.com/pls/apex/f?p=44785:24:0::NO:24:P24_CONTENT_ID,P24_PREV_PAGE:4544,29

引导您创建领域。您只需完成将“master”添加为领域参与者的额外步骤

【讨论】:

    【解决方案2】:

    Oracle 帐户模型无法按照您描述的方式工作。创建用户的用户对该用户创建的对象没有特殊权限。所有的用户都出生在一种人工状态

    对象权限只有两个级别:

    • 授予个别架构中特定对象的权限
    • 授予每个模式中给定类型的所有对象的权限,通过 ANY 权限获得。

    第一层是你提到的SLAVE将其对象的权限授予MASTER的机制。第二级非常强大,因为它适用于所有用户拥有的所有对象,包括 Oracle DBMS 帐户,例如 SYS。因此,只有 DBA 用户拥有 ANY 级别的权限是正常的。

    这种情况的原因是 Oracle 使用用户和模式作为控制对数据和功能的访问的机制。在这种情况下,完全由另一个用户拥有的用户没有任何意义。

    【讨论】:

      【解决方案3】:

      您可以使用proxy user 来完成此操作。

      这会让 MASTER 看到 SLAVE 的对象。但是,当 MASTER 作为 SLAVE 连接时,它就无法再看到 MASTER 对象了。

      --Create master user
      create user master identified by master;
      grant connect, create table to master;
      
      --Create slave user, and grant proxy to master
      create user slave identified by slave;
      grant connect, create table to slave;
      alter user slave grant connect through master;
      
      --Connect as master, create a table
      sqlplus master/master@orcl2
      create table master_table(a number);
      exit;
      
      --Connect as slave, create a table
      sqlplus slave/slave@orcl2
      create table slave_table(a number);
      exit;
      
      --Connect as master, but pretending to be slave
      sqlplus master[slave]/master@orcl2
      
      --You can see the slave tables 
      select * from slave_table;
          no rows selected
      
      --But you cannot see the master tables
      select * from master.master_table;
          ERROR at line 1:
          ORA-00942: table or view does not exist              *
      

      【讨论】:

        【解决方案4】:

        我不确定您的要求...如果您希望“主”用户自动访问“从”对象,那么您可以通过将 dba 授予主用户来做到这一点

        grant dba to master;
        

        如果您打算做其他事情,请澄清您的问题并提供更多详细信息以帮助您。

        【讨论】:

        • 这可能是答案的一部分,“master”可以访问“slave”对象。我真正想要的只是将“从”获得的任何新权限复制给“主”用户。考虑“USER X”向“slave”授予新权限,“master”也应该拥有这些权限的副本,而无需将权限显式转移给“master”。
        • 只有 DBA 应该被授予DBA 角色。从问题中不清楚 MASTER 是 DBA 帐户 - 尽管只有 DBA 应该创建用户。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多