Role a oprávnění
Sekce Oprávnění je prohlížeč rolí a oprávnění pro PostgreSQL. Role serveru rozkládá po
vzoru Finderu do sloupců vedle sebe: vlevo vyberete roli a sloupce napravo od ní ukazují, čeho je
členem, kdo je členem jí a co může skutečně dělat s každým databázovým objektem — včetně všeho,
co má jen nepřímo, prostřednictvím zděděných členství v rolích nebo prostřednictvím
PUBLIC. Role, členství, oprávnění, výchozí oprávnění a vlastnictví lze přímo zde
vytvářet, měnit a odebírat.
Poznámka: tato sekce v současnosti podporuje pouze PostgreSQL. U všech ostatních připojení zobrazí Oprávnění zatím nejsou podporována pro … / Aktuálně je podporován pouze PostgreSQL.

Otevření sekce
Klikněte na ikonu Oprávnění (ikona lidí) na levé liště. Sekce pracuje s připojením, které je už otevřené v sekci Databáze: nahoře se zobrazuje stejný pruh záložek otevřených připojení a sekce používá tu záložku připojení, která je v něm vybraná. Není-li otevřeno žádné připojení, zobrazí se Není otevřené žádné připojení — nejprve nějaké otevřete (viz Správa databází). Sloupce se sestavují znovu při každém vstupu do sekce, takže se předchozí výběr vždy zruší.
Vše, co zde děláte, vyžaduje stejná oprávnění, jaká by vyžadoval odpovídající SQL příkaz
(CREATEROLE, superuživatele nebo vlastnictví objektu, podle akce) — OmniDB spouští
příkazy s přihlašovacími údaji připojení, které používáte. Tři sloupce lze zvětšovat a zmenšovat
tažením tenkého úchytu na jejich pravém okraji; dvojklik na úchyt vrátí šířku daného sloupce
do výchozího stavu a šířky se pamatují.
Sloupec 1: Role
Sloupec Role obsahuje všechny role na serveru včetně vestavěných rolí
pg_*, seřazené podle názvu. Role, které se mohou přihlásit (uživatelé), mají ikonu
jedné postavy; role, které se přihlásit nemohou (skupiny), mají ikonu dvou postav; superuživatelé
jsou označeni (superuživatel) a role s vypršelou platností účtu (prošlá platnost).
Prvním řádkem je vždy PUBLIC (ikona zeměkoule) — nejde o skutečnou roli, ale
o pseudoroli, do které implicitně patří každá role, aby bylo možné oprávnění udělená roli
PUBLIC procházet a upravovat stejným způsobem.
Pole nad seznamem filtruje role podle názvu a rozbalovací seznam vedle něj podle druhu: Všechny role, Uživatelé (mohou se přihlásit), Skupiny (bez přihlášení), Superuživatelé nebo Prošlé.
Kliknutím na roli ji zaměříte; ostatní sloupce pak ukazují tuto roli. Pod seznamem:
- + otevře dialog Vytvořit roli: Název role, Heslo a zaškrtávací políčka atributů Může se přihlásit (ve výchozím stavu zapnuto), Superuživatel, Může vytvářet databáze, Může vytvářet role, Dědí oprávnění rolí, jejichž je členem (ve výchozím stavu zapnuto), Může iniciovat replikaci a Obchází zabezpečení na úrovni řádků (RLS), a dále Limit připojení (-1 = neomezeno) a Platnost účtu do (ponechte prázdné pro neomezenou platnost).
- − odstraní vybranou roli (u
PUBLICje nedostupné).

Kliknutí pravým tlačítkem na roli (kromě PUBLIC) nabídne:
- Změnit heslo — dvakrát se zeptá na nové heslo. Heslo se před odesláním zahešuje ve formátu, na který je nakonfigurován samotný server (SCRAM-SHA-256 nebo md5).
- Upravit atributy — stejná pole atributů jako v dialogu Vytvořit roli, předvyplněná aktuálními hodnotami role. Vymazáním pole Platnost účtu do se omezení platnosti zruší.
- Přejmenovat roli —
ALTER ROLE … RENAME TO. Oprávnění, členství i vlastnictví přejdou na nový název; dialog upozorní, že PostgreSQL při přejmenování smaže heslo uložené jako md5. - Exportovat oprávnění / Exportovat oprávnění všech rolí — kopírovatelný SQL
skript, který oprávnění znovu vytvoří:
CREATE ROLE(pouze atributy), členství, přímá oprávnění na objektech a výchozí oprávnění, příkazy každé databáze pod jejím vlastním nadpisem. Každou část lze vypnout a skript se znovu vygeneruje; Uložit do souboru… ho uloží (nativní dialog Uložit v desktopové aplikaci, stažení v prohlížeči). Hesla, oprávněníPUBLIC, vlastnictví a nastavení rolí se neexportují. - Klonovat roli — vytvoří novou roli s atributy zdrojové role a volitelně i s jejími přímými
členstvími a přímými oprávněními na objektech v každé databázi (nalezenými přes
pg_shdepend, takže databáze, kde role nic nedrží, se vůbec neotevírají). Heslo se nekopíruje; v dialogu ho můžete nastavit. Výchozí oprávnění, vlastněné objekty a nastavení jednotlivých rolí se nekopírují. - Odstranit roli — pokud role stále vlastní objekty nebo drží oprávnění, dialog po
databázích vypíše, co vlastní a drží, a zeptá se, která role převezme její objekty. OmniDB pak
v každé dotčené databázi spustí
REASSIGN OWNEDaDROP OWNED(v tomto pořadí, takže se nic nesmaže) a teprve potéDROP ROLE. Bez jakýchkoli závislostí se jen zeptá na potvrzení.

Sloupec 2: členství
Druhý sloupec je rozdělen na dvě poloviny:
- … — Členové (nahoře): role, které jsou členy zaměřené role. Je-li zaměřena
PUBLIC, uvádí všechny role, protože všechny implicitně dostávají oprávněníPUBLIC. - … — členem role (dole): všechny role, do kterých zaměřená role patří, ať přímo,
nebo přes jiné role, sloučené do jednoho seznamu.
PUBLICje vždy uvedena první.
V obou polovinách se přímá členství zobrazují normálním písmem a nepřímá (zděděná)
kurzívou s vybledlou ikonou. Přímé členství udělené WITH ADMIN OPTION je označeno
(admin option); na PostgreSQL 16 a novějším označují (bez dědění) a (bez SET)
členství, kterým chybí volba INHERIT nebo SET.
- + pod členem role otevře Přidat členství: vyberte jednu nebo více rolí, jejichž členem se má zaměřená role stát (kliknutím na řádky je přepínáte), případně s volbou S právem předávat toto členství (admin option). Na PostgreSQL 16+ dialog nabízí také volby INHERIT a SET (Výchozí podle serveru / Ano / Ne).
- + pod Členové otevře Přidat člena: stejný dialog v opačném směru — vybrané role se stanou členy zaměřené role.
- − (nebo pravým tlačítkem → Odebrat členství) odebere členství po dotazu Odebrat členství v roli „…“?. Odebrat lze jen přímá členství; zděděné je nutné odebrat tam, kde je skutečně uděleno.
- Pravým tlačítkem → Upravit volby členství změní u přímého členství přímo na místě
admin option a (na PostgreSQL 16+) volby
INHERIT/SET. - Dvojklik na řádek, nebo pravým tlačítkem → Nastavit jako aktivní roli, udělá z této role zaměřenou roli, přesně jako byste na ni klikli ve sloupci Role — nejrychlejší způsob, jak sledovat řetězec dědičnosti směrem nahoru.
Sloupec 3: objekty a efektivní oprávnění
Třetí sloupec, … — Objekty, je strom všeho, k čemu má zaměřená role jakékoli oprávnění
— jejích efektivních oprávnění: vlastních přímých udělení a všeho, co dědí přes svá
členství a přes PUBLIC. Začíná dvěma skupinami, Databáze (všechny databáze
na serveru) a Tablespace; uzel se zobrazí normálně, pokud v něm role má nějaké
oprávnění, jinak šedě. Pole nahoře filtruje databáze a tablespace podle názvu a při přepnutí
role si svůj text zachová.
Rozbalení databáze načte její objekty přes samostatné připojení k této databázi (aktivní databáze samotné záložky připojení se nemění): Schémata a uvnitř každého schématu složky pro Tabulky, Pohledy, Sekvence, Funkce, Procedury, Materializované pohledy, Typy a Domény; foreign data wrappery a cizí servery jsou přímo pod databází. Uvádějí se jen objekty, ke kterým role skutečně má nějaké oprávnění (systémová schémata jsou vynechána); šedě zobrazené schéma je v seznamu jen proto, že něco uvnitř něj oprávnění má. Každá databáze má navíc dvě další složky: Vlastněné objekty (n), která uvádí, co tam role vlastní (nejvýše 1000 položek), a Výchozí oprávnění, popsaná níže. Není-li tam vůbec nic, databáze zobrazí Žádná oprávnění na objektech v této databázi.

Úprava oprávnění
Klikněte pravým tlačítkem na databázi, tablespace, schéma nebo objekt a zvolte Upravit oprávnění. Dialog zobrazí každé oprávnění platné pro daný druh objektu jako zaškrtávací políčko:
- databáze:
CREATE,CONNECT,TEMPORARY; - tablespace:
CREATE; schéma:CREATE,USAGE; - tabulka, pohled a materializovaný pohled:
SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER; - sekvence:
USAGE,SELECT,UPDATE; - funkce a procedura:
EXECUTE; - typ, doména, foreign data wrapper a cizí server:
USAGE.
Políčka ukazují, co role drží přímo:
- zaškrtnuté — uděleno roli přímo; zrušením zaškrtnutí ho odeberete
(
REVOKE); - nezaškrtnuté — není uděleno přímo; zaškrtnutím ho udělíte (
GRANT). Pokud role oprávnění už má přes jinou roli neboPUBLIC, zůstává nezaškrtnuté a je označeno Zděděno od: … — přesto ho můžete zaškrtnout a udělit přímo, takže zůstane zachováno i po odebrání členství, ze kterého pochází. Chcete-li zděděné oprávnění odebrat, odeberte ho u zdroje (zdrojovou roli nastavte jako aktivní pomocí Nastavit jako aktivní roli).

S právem předávat toto oprávnění dál se vztahuje na oprávnění, která v dialogu nově udělíte. Potvrďte tlačítkem Uložit.
Chcete-li udělit oprávnění k objektu, který ve stromu zatím není, použijte +
(Přidat oprávnění na objektu) pod sloupcem: zvolte Typ objektu, poté
Databázi (u všeho kromě databází a tablespace; ve výchozím stavu aktuální databáze
připojení), Schéma u objektů na úrovni schématu, samotný Objekt (funkce se
zobrazují se signaturou argumentů), zaškrtněte Oprávnění a případně S právem
předávat toto oprávnění dál. U tabulek, sekvencí, funkcí a procedur lze volbu Rozsah
přepnout z Vybraný objekt na Všechny … ve schématu s akcí Udělit nebo
Odebrat: OmniDB pak spustí GRANT/REVOKE … ON ALL … IN SCHEMA, což se
týká objektů existujících nyní, nikoli těch vytvořených později.
Když v prvním sloupci vyberete PUBLIC, můžete upravovat, co je uděleno přímo roli
PUBLIC (GRANT … TO PUBLIC / REVOKE … FROM PUBLIC).
Výchozí oprávnění
Složka Výchozí oprávnění u databáze uvádí položky ALTER DEFAULT PRIVILEGES,
které se týkají zaměřené role, ať jako příjemce, nebo jako vytvářející role. Slouží k pokrytí
objektů, které vzniknou v budoucnu. Klikněte na složku pravým tlačítkem a zvolte Přidat výchozí
oprávnění: vyberte vytvářející roli (Pro objekty vytvořené rolí), schéma (nebo všechna
schémata), druh objektu (tabulky, sekvence, funkce, typy, schémata) a oprávnění. Pravým tlačítkem
na existující položku zvolíte Upravit oprávnění (udělí se nebo odeberou jen ta zaškrtnutí,
která změníte) nebo Odebrat výchozí oprávnění.
Vlastnictví a kdo má přístup
- Změnit vlastníka (kontextová nabídka libovolného objektu ve sloupci Objekty)
spustí pro objekt
ALTER … OWNER TO. - Kdo má přístup je opačný pohled: uvádí každou roli, která může s objektem
něco dělat, a proč — vlastník, přímé udělení, zděděno přes členství nebo superuživatel — a dále
PUBLIC, s označením práva předávat oprávnění dál. Odpovědi pocházejí z vlastních funkcí PostgreSQLhas_*_privilege, takže odpovídají tomu, co server skutečně dovolí. Role, které mají jen to, coPUBLICdává všem, jsou vynechány a superuživatelé jsou sloučeni do sbalené skupiny; kliknutím na roli ji nastavíte jako aktivní.

Náhled SQL
Dialogy pro vytvoření, úpravu, přejmenování a klonování rolí, přidání členství, udělení nebo úpravu oprávnění, výchozí oprávnění a změnu vlastníka mají sbalitelné pole Zobrazit SQL. Ukazuje přesné příkazy, které by se s aktuálními hodnotami formuláře spustily — sestavené stejným kódem serveru jako skutečné volání, nic se neprovádí, hesla jsou maskována — a při změnách formuláře je průběžně aktualizuje. Kopírovat SQL je zkopíruje.
Důležité: potvrzení dialogu provede příkazy na serveru okamžitě — neexistuje možnost vrácení zpět. Nejprve je zkontrolujte pomocí Zobrazit SQL. Odstranit roli, Odebrat členství a Odebrat výchozí oprávnění se navíc ptají na potvrzení. Pokud server příkaz odmítne, zobrazí se jeho chybová zpráva.