Postgresql
向 Postgres 上的使用者部分授予架構使用權
我在一個特定的表中為一個使用者授予了 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
看:
IDENTITY
Postgres 10 或更高版本中的列不需要這樣做。由於 Postgres 9.3 像上面這樣的簡單視圖是自動更新的。根據文件:
簡單視圖可以自動更新:系統將允許
INSERT
,UPDATE
和DELETE
語句以與正常表相同的方式在視圖上使用。如果滿足以下所有條件,則視圖將自動更新:然後
REVOKE
來自 的所有特權public
,應該對公眾隱藏(包括this_user
)。有關預設權限和基礎知識的更多資訊: