Postgresql
將 search_path 設置為角色似乎在 postgres 中不起作用
我創建了一個連接
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;