Postgresql

Postgresql:創建角色、模式和更改所有權,但不是超級使用者

  • June 22, 2017

我需要在數據庫中創建各種架構並將這些架構的所有權授予特定使用者。我想在腳本中執行此操作,並且我不想成為 postgres 使用者或超級使用者。我的使用者 pat 具有 createdb 和 createrole 權限。

pat=> create role toto with login password 'pass';  
pat=> create schema toto;
pat=> alter schema toto owner to toto;
ERROR:  must be member of role "toto"

有沒有辦法在不成為 postgres 或 superuser 的情況下做到這一點?或者我應該在執行腳本時給予 pat 超級使用者權限並在之後刪除它?最好的程序是什麼?

根據文件

您必須擁有架構才能使用 ALTER SCHEMA。要重命名模式,您還必須具有數據庫的 CREATE 權限。要更改所有者,您還必須是新所有者角色的直接或間接成員,

$$ … $$

因此,在您的情況下,您要麼需要成為超級使用者,要麼是要將所有權轉移到的角色的成員。

最終,雖然我為你的努力喝彩,但如果沒有超級使用者的使用,你將很難管理它。所以我會專注於鎖定超級使用者的使用,也許將這些步驟包裝在一些安全定義器函式中。

我應該在執行腳本時給予 pat 超級使用者權限並在之後刪除它嗎?最好的程序是什麼?

最佳實踐,或者我這樣做的方式是簡單地創建模式並將其分配給使用者AUTHORIZATION

我可能會這樣做..

sudo -u postgres psql <<EOF
 CREATE USER toto WITH LOGIN PASSWORD 'pass';
 CREATE SCHEMA toto AUTHORIZATION toto;
EOF

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