2013-01-05 76 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    *