PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Cosa fa esattamente GRANT USAGE ON SCHEMA?

GRANT s su oggetti diversi sono separati. GRANT ing su un database non GRANT diritti sullo schema all'interno. Allo stesso modo, GRANT ing su uno schema non concede i diritti sulle tabelle all'interno.

Se hai i diritti su SELECT da una tabella, ma non il diritto di vederlo nello schema che lo contiene, quindi non puoi accedere alla tabella.

I test sui diritti vengono eseguiti nell'ordine:

Do you have `USAGE` on the schema? 
    No:  Reject access. 
    Yes: Do you also have the appropriate rights on the table? 
        No:  Reject access. 
        Yes: Check column privileges.

La tua confusione potrebbe derivare dal fatto che il public lo schema ha un GRANT predefinito di tutti i diritti al ruolo public , di cui ogni utente/gruppo è membro. Quindi tutti hanno già l'utilizzo su quello schema.

La frase:

(supponendo che siano soddisfatti anche i requisiti di privilegio degli oggetti)

Sta dicendo che devi avere USAGE su uno schema per utilizzare gli oggetti al suo interno, ma con USAGE su uno schema non è di per sé sufficiente per utilizzare gli oggetti all'interno dello schema, è necessario disporre anche dei diritti sugli oggetti stessi.

È come un albero di directory. Se crei una directory somedir con il file somefile al suo interno quindi impostalo in modo che solo il tuo utente possa accedere alla directory o al file (modalità rwx------ nella directory, modalità rw------- sul file) nessun altro può elencare la directory per vedere che il file esiste.

Se dovessi concedere i diritti di lettura mondiale sul file (modalità rw-r--r-- ) ma non modificare i permessi della directory non farebbe differenza. Nessuno poteva vedere il file per leggerlo, perché non hanno i diritti per elencare la directory.

Se invece imposti rwx-r-xr-x nella directory, impostandolo in modo che le persone possano elencare e attraversare la directory ma non modificando i permessi dei file, le persone potrebbero elencare il file ma non è stato possibile leggere perché non avrebbero accesso al file.

Devi impostare entrambi autorizzazioni per consentire alle persone di essere effettivamente in grado di visualizzare il file.

Stessa cosa a pag. Hai bisogno di entrambi gli schemi USAGE diritti e diritti sull'oggetto per eseguire un'azione su un oggetto, come SELECT da una tabella.

(L'analogia cade leggermente in quanto PostgreSQL non ha ancora la sicurezza a livello di riga, quindi l'utente può ancora "vedere" che la tabella esiste nello schema tramite SELECT da pg_class direttamente. Tuttavia, non possono interagire con esso in alcun modo, quindi è solo la parte "elenco" che non è proprio la stessa.)