Get Role DDL

18 views
Skip to first unread message

zdenek....@gmail.com

unread,
Jan 18, 2023, 2:43:40 AM1/18/23
to PostgreSQL-cz
Ahoj, včera jsem potřeboval najít  DDL jedné role,  něco jako  dbms_metadata.get_ddl v Oracle. Nakonec jsem to zjistil těmito příkazy. Tak třeba se to bude někomu hodit, na webu jsem totiž nic funkčního  nenašel.

pg_dumpall --roles-only > roles.lst
pg_dump --section=pre-data -d dbname | grep -e '^\(GRANT\|REVOKE\)'  > roles2.lst


ZBER

Pavel Stehule

unread,
Jan 18, 2023, 6:44:26 AM1/18/23
to postgr...@googlegroups.com


st 18. 1. 2023 v 8:43 odesílatel zdenek....@gmail.com <zdenek....@gmail.com> napsal:
Ahoj, včera jsem potřeboval najít  DDL jedné role,  něco jako  dbms_metadata.get_ddl v Oracle. Nakonec jsem to zjistil těmito příkazy. Tak třeba se to bude někomu hodit, na webu jsem totiž nic funkčního  nenašel.

pg_dumpall --roles-only > roles.lst
pg_dump --section=pre-data -d dbname | grep -e '^\(GRANT\|REVOKE\)'  > roles2.lst

zatim se vsechny exporty ddl delaji skrze pg_dump. Pro role se pouziva pg_dumpall, jelikoz role jsou v postgresu per instance.

Daji se najit ruzne ddl extractory, pg_dump, pg_dumpall je ale po ruce vzdy



Hezky den

Pavel Stehule

p.s. zbyva par poslednich mist na p2d2 2023, takze pokud chcete prijit, tak neodkladejte registraci





ZBER

--
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.
Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/postgresql-cz/9e83d486-0957-4647-bc2f-4958b4cd82b8n%40googlegroups.com.

Jan Michálek

unread,
Jan 18, 2023, 8:51:33 AM1/18/23
to postgr...@googlegroups.com
Dost toho jde vykuchat dotazama z katalogu - je fce "aclexplode", kterýma jdou rozbetlovat ty acl sloupce. Pokud neřešíš row level security, tak by mělo stačit projet pg_class, pg_database, pg_namespace a pg_proc. Z toho dostaneš granty. U z pg_roles a pg_auth_member dostaneš hash hesla (na založeníí stačí) a příslušnost k rolím.

Je;

st 18. 1. 2023 v 12:44 odesílatel Pavel Stehule <pavel....@gmail.com> napsal:


--
Jelen
Starší čeledín datovýho chlíva

Michal Bartak

unread,
Jan 18, 2023, 9:50:09 AM1/18/23
to postgr...@googlegroups.com
Ahoj
jj. aclexplode() - vzdy existujici, donedavna ale nezdokumentovana a neznama funkce (viz stackoverflow priklady nabizejici rucni parsovani acl retezcu ;) )

Anyway, u aclexplode() je treba pamatovat na jednou vec.
Metarole public je na vystupu teto funkce identifikovana cislem 0 (zero). Takovy zaznam v pg_roles neexistuje. A to znamena par zajimavosti:
  • Nutnost pouzivani LEFT JOIN pro joinovani pomoci role oid. Jinak vam utecou granty pro public metaroli
  • 0::regrole  - vraci pomlcku. Ttusim ze je to nejaky hardcodovana vyjimka, jinak by to spadlo s exception.
  • SELECT to_regrole('public') - vraci NULL 
Druha dulezita vec je, public meta role je zaregistrovana v postresu malymi pismeny. A to navzdory tomu ze vsude v dokumentaci ale i v information_schema se vyskytuje velkim pismenem. 
To vede k dvem cevem:
  • je treba si na to pamatovat pokud pouzijete zaznamy z information_schema spolu s quote_ident() nebo %I placeholder v format() funkci. 
    SELECT format('GRANT %s ON tabulka TO %I', privilege_type, grantee) FROM information_schema.role_table_grants  -- spadne s chybou pro public meta roli
  • pokud nahodou nekdo vytvori roli PUBLIC velkym pismenem (malym nejde, velkim ano), tak v information_schema nepoznate, ktera role je metarole public a ktera PUBLIC ;)

PS. Chtel jsem o tom prednaset na P2D2 ale jsem se nevesel ;)

Michal Bartak

st 18. 1. 2023 v 14:51 odesílatel Jan Michálek <godzil...@gmail.com> napsal:

Jan Michálek

unread,
Jan 18, 2023, 1:49:08 PM1/18/23
to postgr...@googlegroups.com
Tak zrovna tohle používám docela roky. Myslim, že jsem to vykoukal buď přes ECHO HIDDEN ON z metacommandů psql, nebo ze zdrojáků pg_admina3, nebo z pohledů v information_schema. Já se ten pg_catalog docela naučil, i když se říkalo, že je lépe používat information_schema, že podléhá standardu. Ten katalog se oplatí (mě se to oplatilo) naučit, dá se tam vymyslet nejedna šikovná finta.

Je;

st 18. 1. 2023 v 15:50 odesílatel Michal Bartak <maxym...@gmail.com> napsal:
Reply all
Reply to author
Forward
0 new messages