2011-12-13 34 views
21

Da the PostgreSQL docs:Perché PostgreSQL ha unito utenti e gruppi in ruoli?

Il concetto di ruoli sussume i concetti di "utenti" e "gruppi". Nelle versioni PostgreSQL precedenti alla 8.1, gli utenti e i gruppi erano tipi distinti di entità, ma ora ci sono solo ruoli. Qualsiasi ruolo può agire come utente, un gruppo o entrambi.

Perché hanno apportato questa modifica in 8.1?

Forse è più semplice dal punto di vista dei programmatori C, con una sola classe di ruolo (struct)?

More details:

CREATE USER is equivalent to CREATE ROLE except that CREATE USERdà il permesso LOGIN per l'utente/ruolo.

(sto per la progettazione di un sistema di autorizzazione per il mio webapp, quindi mi interessa questo.)

risposta

27

L'unione ha molti vantaggi e nessun svantaggio. Ad esempio, ora puoi convertire senza problemi un "utente" in un "gruppo" e viceversa aggiungendo/rimuovendo il privilegio LOGIN.

ALTER ROLE myrole LOGIN; 
ALTER ROLE myrole NOLOGIN; 

Oppure si può GRANT appartenenza a qualsiasi altra login ("utente") o il ruolo non di login ("gruppo") per un ruolo:

GRANT joe TO sue; 

È ancora possibile:

CREATE USER james; 

Questo è solo un role with login privilege ora. Oppure:

CREATE GROUP workers; 

Questo è effettivamente the same as CREATE ROLE ora.

Il manual ha tutto.

3

Dal manual:

Lo standard SQL definisce i concetti di utenti e ruoli, ma è che li considera come concetti distinti e lascia tutti i comandi che definiscono gli utenti da specificare da ciascuna implementazione del database. In PostgreSQL abbiamo scelto di unificare utenti e ruoli in un unico tipo di entità. I ruoli hanno quindi molti più attributi opzionali rispetto allo standard .

+2

Questo in realtà non risponde * perché * però ... –

+0

È qualcosa che dovresti chiedere agli hacker che l'hanno fatto, non ad alcuni forum come SO. –

+0

Giusto abbastanza :) Solo dicendo che è come ho letto la domanda. –

3

Avere una distinzione tra utenti e gruppi non ti porta nulla.

per quanto ne so il motivo per il cambiamento è stato per semplificare l'usi come:

  • Un utente mascherato come un altro, per esempio un superuser simulando una ridotta utente permessi.Con ruoli unificati questo diventa solo un altro cambiamento del ruolo attuale, non diverso dal cambiamento del gruppo primario.

  • Gruppi che sono membri di altri gruppi per implementare autorizzazioni di accesso granulari.

Se si desidera che i dettagli, però, si sta meglio fuori controllando gli archivi della lista pgsql-hackers per il periodo, e la storia git (convertito da CVS).

+0

Grazie per aver suggerito gli archivi della lista di pgsql-hacker. Ho trovato una discussione pertinente e ho aggiunto un'altra risposta a questa domanda. – KajMagnus

5

Ho trovato this thread in the PostgreSQL-Hackers list, dal 6 giugno 2003, che alla fine suggerisce di consolidare utenti e gruppi e ruoli. (Grazie a Craig Ringer per avermi suggerito di controllare gli archivi della lista pgsql-hacker.)

Ecco alcuni dei vantaggi menzionati (quelli che ho trovato).

consentire ai gruppi di avere gruppi come membri

il codice ACL verrebbe semplificata

il GRANT/REVOCA sintassi e il formato di visualizzazione per gli elenchi ACL potrebbe essere semplificato, dal momento che non ci sarebbe stato è necessario un indicatore sintattico come se un determinato nome è un utente o un gruppo.

In alcune circostanze ho potuto vedere che dare un senso di consentire la registrazione in direttamente come un gruppo/ruolo/whatchacallit

Questo sarebbe anche risolvere il problema che information_schema vista saranno mostrare solo gli oggetti di proprietà

[ rende più facile] privilegi che rappresentano concessi ai gruppi [dal momento che ci si semplicemente riutilizzare il codice relativo ruolo?]

Problemi correlati