Come concedere i privilegi di drop table / function a un ruolo in PostgreSQL?


10

Voglio concedere dropprivilegi su tutte le tabelle e funzioni (non solo quelle di proprietà dell'utente) in un determinato schema di un database specifico per un ruolo specifico. Tuttavia, GRANT ALL PRIVILEGESnon è abbastanza e non ho trovato il modo di fare senza rendere il ruolo un superutente: il superutente ha diritti su altri database sullo stesso server, che non è quello che voglio. Non mi dispiacerebbe i privilegi di superutente limitati a un database specifico, ma non sono sicuro di come farlo.

Il mio codice:

CREATE USER _administrator PASSWORD 'pwd12345';
CREATE ROLE administrator NOLOGIN ADMIN _administrator;

GRANT ALL PRIVILEGES ON DATABASE "myDB" TO administrator;
GRANT ALL PRIVILEGES ON SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO administrator;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO administrator;

administratorè il gruppo di myDBamministratori di database, _administratorè il ruolo più potente che la mia app client sarà in grado di accedere come.

Cosa mi sono perso o sbagliato?

Risposte:


11

Solo il proprietario (e i superutenti) possono rilasciare oggetti. Per documentazione:

Il diritto di rilasciare un oggetto o di modificarne la definizione in alcun modo, non è trattato come un privilegio concedibile; è inerente al proprietario e non può essere concesso o revocato. (Tuttavia, un effetto simile può essere ottenuto concedendo o revocando l'appartenenza al ruolo che possiede l'oggetto; vedere di seguito.) Il proprietario ha implicitamente tutte le opzioni di concessione anche per l'oggetto.

Quindi, rendi administrator propri tali oggetti che gli utenti dovrebbero poter rilasciare.

ALTER FUNCTION foo() OWNER TO administrator;
ALTER TABLE foo      OWNER TO administrator;

E ti sei ricordato di concedere effettivamente l'appartenenza al gruppo, giusto?

GRANT administrator TO _administrator;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.