Postgresql

將 search_path 設置為角色似乎在 postgres 中不起作用

  • September 15, 2022

我創建了一個連接postgres並執行各種查詢的後端 api。

我為該後端 api創建了一個特定使用者(角色 + 可以登錄權限):

backend_api_user

我還放棄了公共模式,轉而支持後端 api 使用的新模式:

apischema

為了避免必須為後端 api 所做的每個查詢添加前綴,我更改了搜尋路徑,如下所示:

ALTER ROLE backend_api_user SET search_path TO apischema;

問題是我需要在後端 api 查詢中為表的引用添加前綴。因此,即使從 postgres 的角度來看它看起來還不錯,有些東西也不起作用:

SELECT usename, useconfig FROM pg_user WHERE usename='backend_api_user'

旁注:我正在使用 postgres 和 pgadmin4。兩者都是我使用 docker desktop for mac 執行的 docker 容器。

太感謝了。

它僅適用於您執行ALTER ROLE建立的連接,因此請重新啟動應用程序。此外,該設置僅適用於連接backend_api_user本身 - 角色的成員身份是不夠的。

創建backend_api_user角色時,我剛剛添加了以下授權

GRANT INSERT, SELECT, UPDATE, DELETE ON table1, table2, table3, table4 TO backend_api_user;

但是postgres,在表上授予特權並不意味著您沒有架構。並且backend_api_user沒有任何贈款apischema,尤其是USAGE贈款……最終,這個單線完成了這項工作。

GRANT USAGE ON SCHEMA apischema TO backend_api_user;

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