2013-01-05 211 views
2

我想分析DBMS提供的安全性,以下方案提供了我正在寻找的内容的简要说明。Oracle自动授予权限

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

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

CREATE USER slave 
IDENTIFIED BY SlavePassword 
DEFAULT TABLESPACE SomeTablespace; 

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

GRANT CONNECT TO slave; 
GRANT RESOURCE TO slave; 

// 3.新用户 “从” 现在连接到数据库

//用户“奴隶”创建数据库对象(表,程序等),并授予系统其他用户的特权

如何让创建者“主”获得创建的用户“奴隶“未来,未经”奴隶“用户的明确许可,是否已经或将有?

我知道奴隶可以授予他的任何特权给其他用户,但是有没有特殊的权限允许其他用户获得“奴隶”将来的特权?

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

+0

您可能想要避免RESOURCE。从[数据库安全指南](http://docs.oracle.com/cd/E11882_01/network.112/e16543/authorization.htm#sthref647):“注意:Oracle建议您设计自己的数据库安全角色,而不是而不是依靠这个角色。这个角色可能不会由将来的Oracle数据库版本自动创建。“ –

回答

0

我不知道你的要求在这里...如果你想“大师”的用户自动访问“奴隶”的对象,那么你可以通过授予DBA这样做是为了掌握

grant dba to master; 

,如果你打算什么否则请用更多的细节来澄清你的问题来帮助你。

+0

这可能是答案的一部分,“主”可以访问“奴隶”对象。我真正想要的只是将“奴隶”获得的任何新特权复制到“主”用户。考虑到“USER X”赋予“奴隶”新的特权,“主人”也应该拥有这些特权的副本,而不需要将EXPLICIT权限转让给“主人”。 – user1899713

+1

只有DBA应该被授予'DBA'角色。从这个问题来看,MASTER并不是一个DBA账户,尽管只有DBA应该创建用户。 – APC

1

Oracle帐户模型不能按照您描述的方式工作。创建用户的用户对该用户创建的对象没有特殊的权限。所有的用户都出生在奴隶解放的状态

只有两个级别对象特权:在各个模式授予特定对象授予在每一个给定类型的所有对象

  • 特权

    • 特权架构,通过ANY特权获得。

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

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

  • 1

    您或许可以通过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/[email protected] 
    create table master_table(a number); 
    exit; 
    
    --Connect as slave, create a table 
    sqlplus slave/[email protected] 
    create table slave_table(a number); 
    exit; 
    
    --Connect as master, but pretending to be slave 
    sqlplus master[slave]/[email protected] 
    
    --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    *