2015-09-22 105 views
1

我使用SQL Developer與Oracle連接。自動化權利

我嘗試「自動化」權限,這意味着我不需要爲每個表格和每個用戶輸入每個GRANT註釋。所以我的想法是製作三張桌子。一個擁有數據庫中存在的表名和一個表組。一個擁有所有的用戶,另一個擁有rightgroups的權利。

現在我試着自動化它,把它放在一個授予。像:

GRANT (Select rights from DB_Rights where rightgroup = 1) 
    ON (Select tables from DB_Tables where Tablegroup = 1) to (User) 

但它沒有奏效。我的錯誤在哪裏?或者這不可能?是否有另一種選擇來「自動化」它?

+1

我認爲您想查看[ROLES](http://docs.oracle.com)。 com/cd/E25054_01/network.1111/e16543/authorization.htm) – tbone

回答

1

解決方案可能與此類似。你仍然必須編寫正確的SELECT查詢,但你應該知道它是如何工作的。

BEGIN 
    FOR aGRANT IN (
     Select rights, tables, User_NAME 
     from DB_Rights 
      CROSS JOIN DB_Tables 
     where Tablegroup = 1 AND rightgroup = 1 AND Tablegroup = 1) 
    LOOP 
     EXECUTE IMMEDIATE 'GRANT '||aGRANT.rights||' ON '||aGRANT.tables||' TO '||aGRANT.User_NAME; 
    END LOOP; 
END; 

爲了驗證你的命令由DBMS_OUTPUT.PUT_LINE(...);

一般更換EXECUTE IMMEDIATE ...考慮ROLES使用由TBONE的建議。但是,有些情況下ROLES不適用,或者最終出現在「爲ROLES自動提供贈款」而不是「爲用戶自動提供贈款」

+0

現在它能正常工作!!!!!!!!!!!!很多很多感謝你!!!!!!!! :) –

+0

我使用的這種變化是爲了生成要在SQL語句本身中執行的DDL。優點是它可以使複雜DDL的調試更容易,因爲您只需執行SQL並檢查/執行結果即可。雖然這很好。 –

+0

@ S.iggi:如果這是答案,你會考慮接受嗎?爲此,請點擊左側的勾號標記,以便將其標記爲已解決。 – halfer