我正在尝试分析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是否允许这种情况。
答案 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帐户模型无法按您描述的方式运行。创建用户的用户对该用户创建的对象没有特殊权限。所有用户都出生在掌握状态
只有两个级别的对象权限:
第一个级别是您提到的机制,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;
如果您打算采取其他措施,请详细说明您的问题并提供更多详细信息以帮助您。