| add_database_psql16.sh | ||
| readme.md | ||
Script creazione database cliente PostgreSQL
Questo script Bash automatizza la creazione di un nuovo database PostgreSQL per un cliente, comprensivo di:
- Tablespace dedicata con nome cliente in MAIUSCOLO
- Utente PostgreSQL dedicato con nome cliente in minuscolo
- Database con prefisso di prodotto (es.
hr_nomecliente) - Permessi e privilegi configurati in modo coerente con gli ambienti Zucchetti
- Registrazione credenziali e parametri di connessione nel file
/root/db.list
Requisiti
- Sistema Linux con:
- Bash
- PostgreSQL 16 installato e funzionante
- Comando
psqldisponibile nelPATH
- Cluster PostgreSQL che accetta connessioni:
- host:
localhost - utente:
postgres - password:
postgres
(modificabile nello script se necessario)
- host:
- Locale
it_IT.UTF-8installato sul sistema (usato perLC_COLLATEeLC_CTYPE) - Directory delle tablespace disponibile:
/zucchetti/infinity/PostgreSQL/16/data/
- Lo script deve essere eseguito come root (per poter gestire
chown/chmodsulla directory della tablespace e scrivere in/root/db.list).
Cosa fa lo script
Per ogni esecuzione, lo script:
-
Chiede il nome del cliente
- Esempio input:
VillaMafalda - Internamente:
CLIENT_UPPER→VILLAMAFALDA(per tablespace e directory)CLIENT_LOWER→villamafalda(per utente database)
- Esempio input:
-
Chiede il prodotto per cui si installa il database:
- Opzioni:
AGOHRAHRWAHIERPALTRO(prefisso personalizzato)
- Il prodotto viene usato come prefisso del database (in minuscolo).
Esempi:- Prodotto
HR, clienteVillaMafalda→ databasehr_villamafalda - Prodotto
ALTROcon prefissocrm, clienteAcme→ databasecrm_acme
- Prodotto
- Opzioni:
-
Chiede una password per l’utente:
- Se inserita → viene usata così com’è (tranne apice
'che non è ammesso). - Se lasciata vuota → viene generata automaticamente:
- 16 caratteri alfanumerici
[A-Za-z0-9] - nessun carattere speciale
- 16 caratteri alfanumerici
- In entrambi i casi la password viene mostrata a video e salvata in
/root/db.list.
- Se inserita → viene usata così com’è (tranne apice
-
Calcola nomi e percorsi:
- Tablespace:
- Nome:
VILLAMAFALDA(sempre MAIUSCOLO) - Directory:
/zucchetti/infinity/PostgreSQL/16/data/VILLAMAFALDA
- Nome:
- Utente DB:
- Nome:
villamafalda(sempre minuscolo)
- Nome:
- Database:
- Nome: ad es.
hr_villamafalda
- Nome: ad es.
- Tablespace:
-
Crea la directory della tablespace (se non esiste):
mkdir -p /zucchetti/infinity/PostgreSQL/16/data/VILLAMAFALDAchown postgres:postgreschmod 700
-
Si collega a PostgreSQL come utente
postgres(passwordpostgres) e:- Crea/aggiorna il ruolo utente del cliente con:
LOGIN SUPERUSER CREATEDB CREATEROLE INHERIT BYPASSRLS
- Crea/aggiorna la tablespace:
CREATE TABLESPACE VILLAMAFALDA OWNER villamafalda LOCATION '...'- Se già esiste →
ALTER TABLESPACE ... OWNER TO villamafalda
- Crea/aggiorna il database:
CREATE DATABASE <db_name> OWNER <user> TABLESPACE <ts>ENCODING 'UTF8' LC_COLLATE 'it_IT.UTF-8' LC_CTYPE 'it_IT.UTF-8'- Se già esiste →
ALTER DATABASE ... OWNER TO <user>
- Imposta i privilegi:
REVOKE ALL ON DATABASE ... FROM utenteGRANT ALL PRIVILEGES ON DATABASE ... TO utenteREVOKE ALL ON TABLESPACE ... FROM utenteGRANT CREATE ON TABLESPACE ... TO utente WITH GRANT OPTION
- In pgAdmin vedrai:
- Nel database: privilegi tipo
CTcper l’utente - Nella tablespace: privilegi tipo
C*per l’utente, con grantorpostgres
- Nel database: privilegi tipo
- Crea/aggiorna il ruolo utente del cliente con:
-
Aggiorna il file
/root/db.list
Per ogni nuova creazione aggiunge un blocco con il seguente formato:Cliente: <utente DB> Host: <hostname FQDN del server> IP: <primo IP IPv4> User: <utente DB> Password: <password dell'utente DB> Database: <nome database> Tablespace: <directory tablespace>