2015-06-24 48 views
0

我試圖創建一個限制用戶只能看到某些列的視圖。我已授予訪問這些列的權限。但是當我創建視圖時,我遇到了許可錯誤。看來我需要給連接列賦予權限,這是限制列之一。創建Postgresql視圖,限制用戶可以看到的內容

有沒有辦法讓訪問這個受限制的列,創建視圖和撤銷權限,但視圖仍然會在權限被撤銷後運行?

當我撤銷基礎表的權限時,視圖無法運行。

任何幫助,將不勝感激。

+0

我想你想要一個函數,返回一列的列表,而不是視圖 –

+0

但我仍然需要授予權限的連接列受限。所以用戶仍然可以訪問底層表並查看受限制的列。 – user1609817

回答

2

默認情況下,表格只能由其所有者訪問。同一個所有者應該使用要公開的列創建視圖。然後你對其他用戶的GRANT權限改爲SELECT反對查看。這是在SQL標準下授予訪問權限的標準模型。

例子:

CREATE TABLE t1 (
    pk  integer PRIMARY KEY, 
    t1_col varchar 
); 

CREATE TABLE t2 (
    pk  integer PRIMARY KEY, 
    fk_t1 integer NOT NULL REFERENCES t1, 
    t2_col varchar, 
    secret varchar 
); 

CREATE VIEW exposed_columns AS 
    SELECT t1_col, t2_col 
    FROM t1 
    JOIN t2 ON t2.fk_t1 = t1.pk; 

以上所有都是可創建這些對象的角色。同樣的所有者可以允許訪問其他角色:

GRANT SELECT ON exposed_columns TO some_role, another_role; 

與「some_role」或「another_role」角色分配給他們的用戶現在可以從視圖中選擇。視圖後面的表中的其他列 - 例如PK,FK和專欄「祕密」 - 都不能訪問,但是給所有者。

+0

是的,錯過了這裏的明顯。感謝您指出了這一點。 – user1609817

相關問題