GRANTI messaggi su oggetti diversi sono separati. GRANTing su un database non ha GRANTdiritti sullo schema all'interno. Allo stesso modo, l' GRANTing su uno schema non concede i diritti sulle tabelle all'interno.
Se si dispone dei diritti per SELECTda 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 publicschema ha un valore predefinito GRANTdi 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 USAGEsu uno schema per usare gli oggetti al suo interno, ma avere USAGEsu 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 somedircon un file somefileal 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-xsulla 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 USAGEdiritti dello schema che dei diritti dell'oggetto per eseguire un'azione su un oggetto, come SELECTda 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 SELECTinserendola pg_classdirettamente. 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 -eistruzioni for in pqsl.