PostgreSQL o Postgres è un sistema di gestione di database relazionale a oggetti per uso generale open source con molte funzionalità avanzate che consente di creare ambienti a tolleranza di errore o applicazioni complesse.
In questa guida spiegheremo come installare il server del database PostgreSQL su Ubuntu 20.04 ed esploreremo le basi dell'amministrazione del database PostgreSQL.
Prerequisiti #
Per poter installare i pacchetti, devi essere loggato come root o utente con privilegi sudo.
Installa PostgreSQL su Ubuntu #
Al momento della stesura di questo articolo, l'ultima versione di PostgreSQL disponibile dai repository ufficiali di Ubuntu è PostgreSQL versione 10.4.
Esegui i seguenti comandi per installare il server PostgreSQL su Ubuntu:
sudo apt update
sudo apt install postgresql postgresql-contrib
Stiamo anche installando il pacchetto contrib PostgreSQL che fornisce diverse funzionalità aggiuntive per il sistema di database PostgreSQL.
Una volta completata l'installazione, il servizio PostgreSQL si avvierà automaticamente. Usa il psql
strumento per verificare l'installazione collegandosi al server del database PostgreSQL e stampandone la versione:
sudo -u postgres psql -c "SELECT version();"
PostgreSQL 12.2 (Ubuntu 12.2-4) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-8ubuntu1) 9.3.0, 64-bit
Questo è tutto. PostgreSQL è stato installato e puoi iniziare a usarlo.
Ruoli PostgreSQL e metodi di autenticazione #
Le autorizzazioni di accesso al database all'interno di PostgreSQL sono gestite con il concetto di ruoli. Un ruolo può rappresentare un utente del database o un gruppo di utenti del database.
PostgreSQL supporta più metodi di autenticazione. I metodi più comunemente usati sono:
- Fiducia:un ruolo può connettersi senza password, purché le condizioni definite in
pg_hba.conf
sono soddisfatte. - Password:un ruolo può connettersi fornendo una password. Le password possono essere memorizzate come
scram-sha-256
,md5
epassword
(testo in chiaro). - Ident - Supportato solo su connessioni TCP/IP. Funziona ottenendo il nome utente del sistema operativo del client, con una mappatura del nome utente opzionale.
- Peer - Uguale a Ident, ma è supportato solo su connessioni locali.
L'autenticazione del client PostgreSQL è definita nel file di configurazione denominato pg_hba.conf
. Per impostazione predefinita, PostgreSQL utilizza il metodo di autenticazione peer per le connessioni locali.
Il postgres
l'utente viene creato automaticamente quando installi PostgreSQL. Questo utente è il superutente per l'istanza PostgreSQL ed è equivalente all'utente root di MySQL.
Per accedere al server PostgreSQL come postgres
utente, prima passa all'utente, quindi accedi al prompt di PostgreSQL usando il psql
utilità:
sudo su - postgres
psql
Da qui, puoi interagire con la tua istanza PostgreSQL. Per uscire dal tipo di shell PostgreSQL:
\q
Un altro modo per accedere al prompt di PostgreSQL senza cambiare utente è usare sudo
comando:
sudo -u postgres psql
In genere, dovresti accedere al server del database come postgres
solo dall'host locale.
Creazione del ruolo PostgreSQL e del database #
Solo superutenti e ruoli con CREATEROLE
privilegio può creare nuovi ruoli.
L'esempio seguente mostra come creare un nuovo ruolo denominato john
un database chiamato johndb
e concedere privilegi sul database:
-
Crea un nuovo ruolo PostgreSQL:
sudo su - postgres -c "createuser john"
-
Crea un nuovo database PostgreSQL:
sudo su - postgres -c "createdb johndb"
Per concedere i permessi all'utente sul database, connettiti alla shell di PostgreSQL:
sudo -u postgres psql
ed esegui la seguente query:
GRANT ALL PRIVILEGES ON DATABASE johndb TO john;
Abilita accesso remoto al server PostgreSQL #
Per impostazione predefinita, il server PostgreSQL è in ascolto solo sull'interfaccia locale (127.0.0.1
).
Per abilitare l'accesso remoto al tuo server PostgreSQL, apri il file di configurazione postgresql.conf
e aggiungi listen_addresses = '*'
nel CONNECTIONS AND AUTHENTICATION
sezione.
sudo nano /etc/postgresql/12/main/postgresql.conf
/etc/postgresql/12/main/postgresql.conf#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
Salva il file e riavvia il servizio PostgreSQL:
sudo service postgresql restart
Verifica le modifiche con ss
utilità:
ss -nlt | grep 5432
L'output mostra che il server PostgreSQL è in ascolto su tutte le interfacce (0.0.0.0
):
LISTEN 0 244 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 244 [::]:5432 [::]:*
Il passaggio successivo consiste nel configurare il server per accettare connessioni remote modificando pg_hba.conf
file.
Di seguito sono riportati alcuni esempi che mostrano diversi casi d'uso:
/etc/postgresql/12/main/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD
# The user jane can access all databases from all locations using md5 password
host all jane 0.0.0.0/0 md5
# The user jane can access only the janedb from all locations using md5 password
host janedb jane 0.0.0.0/0 md5
# The user jane can access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust
L'ultimo passaggio consiste nell'aprire la porta 5432
nel tuo firewall.
Supponendo che tu stia usando UFW
per gestire il tuo firewall e desideri consentire l'accesso dal 192.168.1.0/24
subnet, eseguiresti il seguente comando:
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5432
Assicurati che il tuo firewall sia configurato per accettare connessioni solo da intervalli IP affidabili.