2013-11-01 47 views
0

我在我們的Oracle環境中有一種情況,我希望能夠在特定模式中的所有視圖上向特定用戶/組授予選擇權限。Grant在Schema X中選擇所有視圖[當前和未來] X

我意識到我可以編寫一個動態語句來遍歷架構中的所有視圖並單獨爲它們授予權限here但我希望能夠將它應用於架構中存在的所有視圖現在或將來。

我也在考慮編寫一個DDL trigger的可能性,它可以監視新視圖的創建,但是在觸發器中設置權限並不是我以前見過的,並且看起來並不像公認的做法。

基本上,是否有查看類似於GRANT EXECUTE ANY PROCEDURE

回答

1

EXECUTE ANY PROCEDURE授予允許用戶在數據庫中的任何模式中執行任何過程,而不僅僅是在特定模式中的那些過程。您可以授予用戶SELECT ANY TABLE權限 - 這將允許用戶查詢數據庫中任何模式中的任何表或視圖,而不僅僅是特定模式中的表。這是類似的特權,這似乎不太可能是你真正想要的。

由於不應該動態創建視圖,通常只需在腳本中包含適當的GRANT語句來處理這類需求,這些語句會創建通過環境升級的新視圖。動態授予權限通常會被忽視,因爲它通常意味着您的變更控制流程存在需要解決的問題。

對於堅持定期創建新對象的第三方應用程序,我有創建了DDL trigger that grants privileges on new objects。爲了做到這一點,您需要提交一份實際上完成GRANT的工作。 A GRANT是一個DDL語句,因此它發出隱式提交併且隱式提交不允許在觸發器中使用,您必須有一個單獨的作業在創建對象後運行。這意味着你最終會得到一些移動的部分,這通常會使你的環境變得更加複雜。

+0

感謝您的澄清,賈斯汀。這樣做的願望具體是由於變革管理的分散性。我希望能夠簡單地設置一個角色,該角色對Schema X中的所有視圖總是對當前存在的視圖以及將來創建的任何視圖具有選擇權限。根據你的回答和持續的研究,我認爲這是不可能的。 – Carth

+0

@Carth - 對,沒有簡單的方法來做這種事情。理想情況下,您需要處理變革管理的分散性。除此之外,DDL觸發器方法工作得相當好,這隻會讓環境變得更加複雜,並且如果觸發器在不同環境中做了不同的事情,可能會使變更管理更難解決。 –

相關問題