Oracle
創建視圖時,如果使用者已經通過角色擁有相同的權限,為什麼還需要直接對象權限?
我在 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 處理對象的方式不兼容(它們要麼有效,要麼無效;它們對某些會話無效,而對其他會話無效)。