Oracle自动GRANT权限

时间:2013-01-05 20:19:46

标签: database oracle database-schema database-management

我正在尝试分析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”在将来拥有或将拥有的任何权限?

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

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

4 个答案:

答案 0 :(得分:3)

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

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

引导您完成创建领域。您只需执行添加“master”作为领域参与者的附加步骤

答案 1 :(得分:1)

Oracle帐户模型无法按您描述的方式运行。创建用户的用户对该用户创建的对象没有特殊权限。所有用户都出生在掌握状态

只有两个级别的对象权限:

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

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

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

答案 2 :(得分: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/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              *

答案 3 :(得分:0)

我不确定你的请求在这里...如果你想让“主”用户自动访问“奴隶”对象那么你可以通过授予dba给主人来做到这一点

grant dba to master;

如果您打算采取其他措施,请详细说明您的问题并提供更多详细信息以帮助您。