在 Oracle 中是否可以創建一個表(或視圖),其中兩個不同的用戶訪問同一個表(或同一個視圖)并且他們看到不同的列集?
例如,兩個用戶對名為 的表/視圖執行相同的查詢employees:
select * from employees;
一位用戶查看列name和salary(總列 = 2)的資料。
其他用戶只能看到該name列的資料(總列數 = 1)。
我知道一個常見的解決方案是針對一個基表創建兩個視圖,并為每個視圖分配不同的權限。但是,這對我們不起作用,因為我們的應用程式需要為兩個用戶使用相同的選擇(相同的 FROM)。換句話說,我們需要將表/視圖視為同一個物件,所有用戶都具有相同的 db.schema.name 識別符號。創建兩個視圖將創建兩個具有不同名稱的物件。
一些資料庫允許授予表(或視圖)列的列權限,但 Oracle 顯然不允許我GRANT SELECT對單個列進行 privs。
另一種選擇是 VPD。但是,我看到的 VPD 示例并未顯示如何隱藏整列。他們展示了如何根據列值隱藏行(例如https://docs.oracle.com/cd/B28359_01/network.111/b28531/vpd.htm#DBSEG98231),或者他們展示了如何屏蔽部分或全部值在一列中。我還沒有看到完全隱藏基于用戶權限的列的 VPD 示例。
Oracle 中是否還有其他選項可以根據用戶權限隱藏列?
提前致謝
uj5u.com熱心網友回復:
你朝著正確的方向前進。為每個用戶創建特定視圖
create view employees_a as select name, salary from employees;
create view employees_b as select name from employees;
然后為了始終使用相同的名稱,請創建用戶特定的SYNONYMS:
create synonym user_a.employees for main_schema.employees_a;
create synonym user_b.employees for main_schema.employees_b;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/424287.html
