Sovvenzioni minime per l'accesso in sola lettura a tabella singola su PostgreSQL


10

Di seguito è riportato un elenco di comandi che sembrano funzionare per creare un nuovo utente (login) e concedere l'accesso in sola lettura per una tabella specificata su PostgreSQL.

Supponiamo che questi comandi vengano eseguiti all'accesso con privilegi sufficienti (ad es. postgresAccesso nell'installazione predefinita).

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';

Ora voglio concedere selectsul tavolo tab_abcsul database db_xyz, quindi eccolo qui (il database db_xyzè selezionato come corrente tramite PgAdmin o qualcosa del genere):

grant select on tab_abc to user_name;

La domanda è: è sufficiente o dovrebbero esserci più sovvenzioni (database connect, usageforse)?

Questi comandi sembrano funzionare per me, ma la mia installazione predefinita ha impostazioni di sicurezza predefinite. Quali ulteriori sovvenzioni devo aggiungere se l'amministratore del server ha configurato una sicurezza più elevata?

Sembra che non ho bisogno di concedere connectusage- sono impliciti durante la concessione select? È sempre così?

Risposte:


12

La domanda è: è sufficiente o dovrebbero esserci più sovvenzioni (connessione al database, utilizzo forse)?

La sicurezza può essere rafforzata dal default principalmente su questi punti:

  • Il pg_hba.conffile. Filtra le connessioni prima di prendere in considerazione qualsiasi privilegio di database. L'impostazione predefinita è relativamente aperta per le connessioni locali, ma potrebbe essere limitata a un elenco esplicito di database, nomi utente e origini di rete.

  • Le autorizzazioni per il pubblico , lo pseudo-ruolo che chiunque ha. Un utente può implicitamente connettersi solo se viene concesso il privilegio di connessione PUBLIC. Vedi L' utente creato può accedere a tutti i database in PostgreSQL senza alcuna concessione . Un database potrebbe avere tutti i privilegi revocati dal pubblico. Vedi REVOKE nel documento per la versione principale di PostgreSQL che stai utilizzando.

  • L'esistenza dello publicschema. Viene creato con il database per impostazione predefinita per comodità, ma non è obbligatorio. Invece di rimuovere le autorizzazioni pubbliche dallo publicschema, potrebbe essere logico che i DBA abbandonino lo publicschema quando i nuovi utenti non dovrebbero avere alcuna autorizzazione implicita.

Nel caso in cui tali valori predefiniti siano stati rimossi, per leggere una tabella è necessario concedere un nuovo utente:

GRANT CONNECT ON DATABASE dbname TO username;

A livello di database:

GRANT USAGE ON SCHEMA schemaname TO username;
GRANT SELECT ON schemaname.tablename TO username;
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.