Perché un nuovo utente è in grado di creare tabelle in PostgreSQL?


13

Ho seguito due tutorial per creare un DB con:

  1. un collegamento utente completamente privilegiato
  2. un link utente di sola lettura

Ho quindi ricevuto un suggerimento dal tutorial di CJ Estel che afferma che "potresti aver ereditato la possibilità di creare tabelle anche se non l'abbiamo mai dato esplicitamente al nostro nuovo utente". Abbastanza sicuro, l'utente di sola lettura è in grado di creare e possedere tabelle!

CJ Estel ha indicato molto bene la causa principale, vale a dire un database modello. Ma la possibilità di creare tabelle mina la maggior parte delle esercitazioni ottenute da Google "sola lettura postgres", incluso uno ospitato su postgresql.org . Il tuo utente ha più di privilegi di sola lettura!

Perché un nuovo utente ha questa capacità? Dopo aver revocato questo privilegio, il database è veramente di sola lettura per quell'utente?

Risposte:


13

TL; DR: i nuovi utenti possono creare tabelle nello publicschema perché le persone si sono lamentate del fatto che era troppo difficile quando non potevano.

Se non ti piacciono i valori predefiniti, dovresti probabilmente creare un nuovo database di modelli con la configurazione iniziale che desideri. Ad esempio, potresti:

DROP SCHEMA public;

o

REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;

nel tuo modello.

Se si desidera che l' publicutente non abbia diritti su un database, è necessario inoltre:

REVOKE ALL ON DATABASE mydbname FROM public;
GRANT CONNECT ON DATABASE mydbname TO public;

in modo che l' publicutente non possa creare schemi o usare tabelle temporanee.


Personalmente, se stavo progettando questo, darei agli utenti il TEMPdiritto sul database di default, ma non CREATE(schemi nel database) o CREATE(tabelle nello publicschema). Li riserverei per il proprietario.

Sono scelte fatte molto tempo fa, però, ed è abbastanza difficile cambiarle ora.


Allo stato attuale, ci sono lamentele regolari che è troppo difficile iniziare con PostgreSQL perché devi creare un account utente e spesso vuoi creare anche un database. Perché non li creiamo solo automaticamente e per impostazione predefinita ci affidiamo alla modalità di autenticazione per semplificare? Perché l' postgresutente non ha la password predefinita postgres? Perché non creiamo automaticamente gli utenti se sono presenti nel sistema operativo? eccetera.

Ci sono alcuni veri problemi di usabilità per i nuovi utenti - in particolare, la maggior parte delle persone non ha idea di cosa sia peerauth o perché solo psqldopo aver installato PostgreSQL dice loro che non c'è nessun utente con il nome con cui hanno effettuato l'accesso.

È anche disordinato pg_hba.confun file di configurazione, ma gli utenti vengono creati a livello SQL. Questa divisione confonde gli utenti.

Molte cose, tuttavia, sono compromessi tra impostazioni predefinite sicure e impostazioni predefinite facili in cui il progetto non renderà mai tutti felici.


Quindi, corro revoke create on database [databasename] from [username];e il DB ora è veramente letto solo per [nome utente]. Giusto?
Tornerò di

2
In risposta al commento precedente, è un no.
Jesvin Jose,
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.