Postgresql

Postgres 10.5:向不是所有者的使用者授予完整的架構訪問權限

  • July 8, 2021

所以我遇到的根本問題是嘗試將我的本地 Postgres 10.5 實例遷移到 RDS。RDS 不給最終使用者SuperUser角色,所以我在嘗試從 pg_dump 導入時遇到了很多權限問題。

例如,以使用者身份登錄postgres- 這是我創建 RDS 實例時創建的使用者。亞馬遜稱之為“root 使用者”:

CREATE SCHEMA f_site;
GRANT ALL ON SCHEMA f_site TO postgres;
GRANT ALL PRIVILEGES ON SCHEMA f_site TO postgres;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA f_site TO postgres;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA f_site TO postgres;
GRANT ALL PRIVILEGES ON DATABASE mydb to postgres;

這些都設置沒有錯誤。現在,所有者發生了變化:

ALTER SCHEMA f_site OWNER TO schemaadmin;

太好了,但是如果我嘗試立即執行另一個授權,只是為了測試我的權限,仍然以postgres使用者身份登錄,同一個會話:

GRANT ALL PRIVILEGES ON SCHEMA f_site TO postgres;
ERROR:  permission denied for schema f_site

基本上,我試圖通過向postgres使用者授予其創建的所有內容的完全授權,然後將該對象的所有權轉移給另一個角色來創建一個“偽超級使用者”。

這是因為我的 pgdump 備份中的第一行本質上是創建模式和設置模式所有者,然後(數千行之後)對其進行更改/添加。通常對於超級使用者來說,這不會是一個問題。

感謝您的任何建議。

好的,在進行了幾次搜尋後發現了這一點。

本質上,您需要將最終擁有該對象的相同角色授予您正在使用的使用者。

所以在我的情況下:postgres是我想成為我的“偽超級使用者”的使用者,並且schemaadmin是擁有對象的使用者角色。

GRANT schemaadmin TO postgres;

之後,schemaadmin 擁有的所有東西,postgres 都可以修改。

您需要向使用者授予架構使用權限。

GRANT USAGE ON SCHEMA "schema_name" TO role;

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