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.)