Oracle

創建視圖時,如果使用者已經通過角色擁有相同的權限,為什麼還需要直接對象權限?

  • July 27, 2011

我在 Oracle 10g 中遇到權限問題。我希望有人可以幫助我理解這一點。

我有一個帶有表格的架構。我已將該表上的選擇授予一個角色。

grant select on user1.example_table to example_role;

然後我將該角色授予使用者:

grant example_role to user2;

然後 user2 想要在該表的頂部創建一個視圖:

create or replace view user2.example_view as
select *
from user1.example_table;

但是,這會引發錯誤:

ORA-01031: insufficient privileges

為什麼呢?如果他們通過角色具有選擇權限,為什麼他們不能在該對像上創建視圖?

我發現我必須將對象直接授予使用者才能工作。

grant select on user1.example_table to user2;

無論如何不必這樣做嗎?我想使用角色,因為我有很多表和很多使用者,並且不想為單個使用者維護一百萬個不同的授權。

雖然您可能有很多使用者,但他們要求他們自己的觀點是不尋常的。視圖應該在一個模式中(可能是擁有表的那個),使用者應該通過在模式名稱前加上前綴(例如 vwowner.view)或使用

ALTER SESSION SET_CURRENT_SCHEMA=vwowner

角色是短暫的。您可以執行 SET ROLE NONE 將它們全部關閉。您可以為啟用不同角色的同一帳戶創建多個會話。這與 Oracle 處理對象的方式不兼容(它們要麼有效,要麼無效;它們對某些會話無效,而對其他會話無效)。

引用自:https://dba.stackexchange.com/questions/4137