Quando sono elencati i privilegi in \ l e quando no?


10

Quando sono elencati i privilegi di accesso per \ l e quando non lo sono? I privilegi di accesso elencati da \ l possono cambiare dopo una concessione e revocare:

$ createuser -EP my_readonly
$ psql development
development=# \l
                                           List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------------------------+----------+----------+-------------+-------------+-----------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
...
development=# grant usage on schema public to my_readonly;
development=# grant connect on database development to my_readonly;
development=# \l
                                             List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |     Access privileges      
-----------------------------+----------+----------+-------------+-------------+----------------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant               +
                             |          |          |             |             | vagrant=CTc/vagrant       +
                             |          |          |             |             | my_readonly=c/vagrant
...
development=# revoke connect on database development from my_readonly;
REVOKE
development=# revoke usage on schema public from my_readonly;
REVOKE
development=# \l
                                           List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------------------------+----------+----------+-------------+-------------+-----------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant          +
                             |          |          |             |             | vagrant=CTc/vagrant

Perché? Quale stato è cambiato? Credo che la capacità dell'utente di my_readonly di connettersi sia rimasta invariata durante l'intera sessione psql (perché suppongo che il ruolo PUBBLICO abbia i privilegi di connessione), ma chiaramente qualcosa è cambiato: cos'è quella cosa?

Domanda laterale: come posso chiedere esplicitamente Postgres siano essi pubblici, infatti, non ha i privilegi di connessione (essi possono essere stati revocati - vedi Perché può un nuovo utente selezionare da qualsiasi tabella? )?

Risposte:


4

I comandi backslash in psql sono collegamenti per una query o query che guardano attraverso i cataloghi di sistema. Il \lcomando esamina le informazioni pg_catalog.pg_database, in particolare, in questa query:

SELECT d.datname as "Name",
   pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
   pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
   d.datcollate as "Collate",
   d.datctype as "Ctype",
   pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;

Puoi far psqlvedere cosa sta usando per i comandi backslash passandogli il -Eflag quando lo invochi sulla riga di comando.

Se le autorizzazioni su un database o un altro oggetto sono le impostazioni predefinite con cui PostgreSQL le crea, la *aclcolonna sarà NULL. Se si modificano le impostazioni predefinite, la colonna ACL verrà popolata con le informazioni relative alle istruzioni GRANTe / o REVOKEeseguite.

È possibile visualizzare le autorizzazioni / ACL in particolare tramite \zo\dp

Se leggi più avanti qui:

http://www.postgresql.org/docs/9.4/static/sql-grant.html

Se scorri verso il basso (o cerca la parola psql), puoi guardare la tabella che mostra come interpretare gli ACL che vedi con \lo in una colonna ACL.

Per esempio:

=Tc/vagrant

significa che PUBLIC (il ruolo implicito che contiene tutti i ruoli) dispone delle autorizzazioni per creare tabelle temporanee Te connettersi c, poiché la riga ACL =xxxxxindica le autorizzazioni applicate a PUBLIC, mentre si rolname=xxxxapplica a quel ruolo specifico.

Questa presentazione di Dalibo dovrebbe anche aiutare a chiarire ulteriormente questo aspetto: Gestione dei diritti in PostgreSQL

Spero che aiuti. =)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.