Nastavení uživatelů a práv

8 views
Skip to first unread message

petrs...@gmail.com

unread,
Jan 29, 2026, 3:21:59 PM (2 days ago) Jan 29
to PostgreSQL-cz
Ahojte,

řešíme rozdělení rolí v PostgreSQL a potřebujeme poradit s minimálními právy pro roli tool, kterou používá Terraform.

Potřebujeme správně nastavit tyto role:

- tool — role používaná Terraformem k provisioningu (má vytvářet, měnit a mazat DB a role).
- owner — role, která je ownerem DB a používá se pro spuštění migrací (má DDL práva).
- app — aplikační role s omezeným přístupem (pouze DML, ne DDL).

Zároveň chceme dosáhnout:

1. Chceme omezit práva na minimální nutnou úroveň.
2. tool musí umět vytvořit a později i smazat či upravit zdroje, které Terraform spravuje.
3. Nechceme/nemůžeme dávat roli tool superusera.
4. DB/owner/app tvori jednotku kterych je N (kazda sluzba ma svoji vlastni db, owner a app roli).
5. Cheme aby jednotlive App byly oddeleny pravy.

Problém:

- Pokud je tool superuser, vše funguje.
- Pokud tool není superuser, nejsem si jistý, jak umožnit, aby kromě vytváření mohl také mazat nebo modifikovat objekty (DROP/ALTER), zvlášť když objekty vlastní jiná role.

V podstatě narážíme na to, že když transferujeme ownership, tak už s objekty terraform role nemůže nakládat. Níže ještě příklad:
  • máme dvě služby: auto a register

  • role tool vytvoří:

    • roli auto_owner

    • roli auto_app

    • databázi auto_db (vlastněnou auto_owner)

    • roli register_owner

    • roli register_app

    • databázi register_db (vlastněnou register_owner)

  • v čase dojde požadavek, že služba auto se má přejmenovat na vozidla

    • role tool tedy potřebuje přejmenovat:

      • roli auto_owner na vozidla_owner

      • roli auto_app na vozidla_app

      • DB auto_db na vozidla_db

  • po čase se má aplikace register odebrat do křemíkového nebe

    • role tool tedy musí smazat:

      • roli register_owner

      • roli register_app

      • databázi register_db


Jak nastavit roli tool, aby umožnila nastíněné scénáře v příkladu a zároveň nebyla superuser. 

Jaké jsou osvědčené postupy pro ownership a role membership v situaci: Terraform + DB migrace + aplikační role?

Existují konkrétní GRANTy nebo mechanismy (role membership, policies), které umožní mazání objektů bez plného superuser práva? Tady narážíme na to, že vytvořenou DB může spravovat jen owner databáze nebo superuser. Nic takového se nám nepodařilo najít a myslíme si, že to dobře nejde.

Michal Bartak

unread,
Jan 29, 2026, 6:50:46 PM (2 days ago) Jan 29
to postgr...@googlegroups.com, PostgreSQL-cz
Ahoj,
co takhle

owner role(s) - nologin - tady na tom bych trval tak nebo onak. je to dobry pattern.

tool - login, inheritance z owner roli. tim muze vytvaret a dropovat objekty vlastnene owner rolemi. prip. umoznuje zmenit context pomoci SET ROLE. A to bez su.
Nevyhoda: kazdou novou owner roli musis nagrantovat k toolu.

Jinak, obcas bez superuser to vubec nejde. mit jednoho dedikovaneho  usera s su neni spatne. muzes pro nej zapnout logovani vsech dotazu pro pripad budouci investigace. 

Michal Bartak

29. 1. 2026 v 21:22, petrs...@gmail.com <petrs...@gmail.com>:


--
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.
Tuto diskuzi najdete na adrese https://groups.google.com/d/msgid/postgresql-cz/91763fec-ed45-47b6-88ba-5b930b97b989n%40googlegroups.com.

Michal Bartak

unread,
Jan 29, 2026, 8:02:31 PM (2 days ago) Jan 29
to postgr...@googlegroups.com
Jeste doplnim

Tool, aby mohl vytvaret novou DB a nove role nemusi byt superuser. Staci ze ma nastevene atributy CREATEDB a CREATEROLE.

Tady funkcni POC:

-- priprava uzivatele tool
CREATE ROLE tool CREATEROLE CREATEDB PASSWORD 'abcd'; -- prihlaseno jako tool

CREATE ROLE test_owner;

GRANT test_owner TO tool;

CREATE DATABASE testcars OWNER test_owner ; -- prihlaseno do testcars jako tool SET ROLE test_owner; CREATE SCHEMA test_schema; SELECT nspowner::regrole FROM pg_namespace WHERE nspname = 'test_schema'

nspowner |

----------+

test_owner|



Dalsi potencialni alternativou, jsou SECURITY DEFINER utility funkce, ktere meni scope na usera, ktery muze vsechno. Treba i superusera zs vypnutou moznosti prihlaseni (NOLOGIN).
K takovym funkcim nagrantujes EXECUTE vyhradne pro uzivatele tool. Je treba mit na vedomi, ze pg vsem novym funkcim grantuje EXECUTE pro public. Je to treba revoke'nout.

Michal

pá 30. 1. 2026 v 0:50 odesílatel Michal Bartak <maxym...@gmail.com> napsal:
Reply all
Reply to author
Forward
0 new messages