GRANT
I messaggi su oggetti diversi sono separati. GRANT
ing su un database non ha GRANT
diritti sullo schema all'interno. Allo stesso modo, l' GRANT
ing su uno schema non concede i diritti sulle tabelle all'interno.
Se si dispone dei diritti per SELECT
da una tabella, ma non il diritto di visualizzarla nello schema che la contiene, non è possibile accedere alla tabella.
I test dei diritti vengono eseguiti in 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 può derivare dal fatto che lo public
schema ha un valore predefinito GRANT
di tutti i diritti sul ruolo public
, di cui ogni utente / gruppo è membro. Quindi tutti hanno già utilizzato 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 usare gli oggetti al suo interno, ma avere USAGE
su uno schema non è di per sé sufficiente per usare gli oggetti all'interno dello schema, devi anche avere i diritti sugli oggetti stessi.
È come un albero di directory. Se crei una directory somedir
con un file somefile
al suo interno, impostala in modo che solo il tuo utente possa accedere alla directory o al file (modalità rwx------
sulla directory , modalità rw-------
sul file), nessun altro può elencare la directory per vedere che il file esiste.
Se dovessi concedere i diritti di lettura globale sul file (modalità rw-r--r--
) ma non modificare i permessi della directory, non farebbe differenza. Nessuno può vedere il file per leggerlo, perché non ha i diritti per elencare la directory.
Se invece si imposta rwx-r-xr-x
sulla directory, impostandola in modo che le persone possano elencare e attraversare la directory ma senza modificare i permessi del file, le persone potrebbero elencare il file ma non potrebbero leggerlo perché non avrebbero accesso al file.
È necessario impostare entrambe le autorizzazioni affinché le persone possano effettivamente visualizzare il file.
Stessa cosa a Pg. Hai bisogno sia dei USAGE
diritti dello schema che dei diritti dell'oggetto per eseguire un'azione su un oggetto, come SELECT
da una tabella.
(L'analogia cade un po 'in quanto PostgreSQL non ha ancora la sicurezza a livello di riga, quindi l'utente può ancora "vedere" che la tabella esiste nello schema SELECT
inserendola pg_class
direttamente. Non può interagire con essa in alcun modo , però, quindi è solo la parte "elenco" che non è esattamente la stessa.)
CREATE EXTENSION
. È più o meno lo stesso problema con i file creati su Linux mentre seisu
. Sarà utile se c'è una sorta disudo -e
istruzioni for in pqsl.