我試圖創建一個限制用戶只能看到某些列的視圖。我已授予訪問這些列的權限。但是當我創建視圖時,我遇到了許可錯誤。看來我需要給連接列賦予權限,這是限制列之一。創建Postgresql視圖,限制用戶可以看到的內容
有沒有辦法讓訪問這個受限制的列,創建視圖和撤銷權限,但視圖仍然會在權限被撤銷後運行?
當我撤銷基礎表的權限時,視圖無法運行。
任何幫助,將不勝感激。
我試圖創建一個限制用戶只能看到某些列的視圖。我已授予訪問這些列的權限。但是當我創建視圖時,我遇到了許可錯誤。看來我需要給連接列賦予權限,這是限制列之一。創建Postgresql視圖,限制用戶可以看到的內容
有沒有辦法讓訪問這個受限制的列,創建視圖和撤銷權限,但視圖仍然會在權限被撤銷後運行?
當我撤銷基礎表的權限時,視圖無法運行。
任何幫助,將不勝感激。
默認情況下,表格只能由其所有者訪問。同一個所有者應該使用要公開的列創建視圖。然後你對其他用戶的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和專欄「祕密」 - 都不能訪問,但是給所有者。
是的,錯過了這裏的明顯。感謝您指出了這一點。 – user1609817
我想你想要一個函數,返回一列的列表,而不是視圖 –
但我仍然需要授予權限的連接列受限。所以用戶仍然可以訪問底層表並查看受限制的列。 – user1609817