Postgresql

向 Postgres 上的使用者部分授予架構使用權

  • November 5, 2018

我在一個特定的表中為一個使用者授予了 INSERT。問題是我還需要在架構中為同一個使用者授予 USAGE,但是在架構中授予 USAGE 也會使該架構中的所有關係對該使用者可見。

我需要此特定使用者只能在此特定表中插入,並且無法查看同一模式中的其他關係(表、序列等)。“無法查看”是指無法看到這些關係的存在。

更清楚的是,在這個使用者的視野中,模式裡面只有那個表,僅此而已。

我建議你為這個使用者創建一個專用的模式(如果它不存在的話),通常與角色的名稱相同。

CREATE SCHEMA this_user;
REVOKE ALL ON SCHEMA this_user FROM public;
GRANT USAGE ON SCHEMA this_user TO this_user;

search_path典型 Postgres 安裝中的預設值是"$user",public. 因此,新架構自動成為this_user. 如果您的安裝不同,請考慮明確設置:

ALTER ROLE this_user SET search_path=`"$user",public`;

更多關於search_path這個相關答案的資訊:

**VIEW**在此架構中創建一個:

CREATE VIEW this_user.the_table AS
TABLE other_schema.the_table;  -- shorthand for "SELECT * FROM"

GRANT SELECT, INSERT ON this_user.the_table TO this_user;

如果涉及列SEQUENCE,您可能需要額外的權限。serial看:

IDENTITYPostgres 10 或更高版本中的列不需要這樣做。

由於 Postgres 9.3 像上面這樣的簡單視圖是自動更新的。根據文件

簡單視圖可以自動更新:系統將允許 INSERT,UPDATEDELETE語句以與正常表相同的方式在視圖上使用。如果滿足以下所有條件,則視圖將自動更新:

然後REVOKE來自 的所有特權public,應該對公眾隱藏(包括this_user)。

有關預設權限和基礎知識的更多資訊:

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