← Tutti gli articoliPHP e database

PHP e database

Creare un utente MySql per connettersi da remoto

Matteo Galacci ·

Caso trattato: MySQL 8 con TLS già configurato e un solo client autorizzato. Occorrono accesso amministrativo al server, indirizzo sorgente del client e certificato CA per la verifica TLS. La creazione dell’account avviene nel client mysql con un utente amministratore.

Per consentire l’accesso remoto servono tre elementi distinti: MySQL in ascolto sull’interfaccia corretta, una regola firewall limitata al client e un account con privilegi adeguati. Preferisci una rete privata o una VPN; non aprire la porta 3306 a tutta Internet.

CREATE USER 'app'@'192.0.2.10' IDENTIFIED BY 'SOSTITUIRE_CON_PASSWORD_UNICA' REQUIRE SSL;
GRANT SELECT, INSERT, UPDATE, DELETE ON applicazione.* TO 'app'@'192.0.2.10';
SHOW GRANTS FOR 'app'@'192.0.2.10';

192.0.2.10 è un indirizzo di documentazione da sostituire con l’IP sorgente realmente visto dal server. Il database deve esistere. Aggiungi privilegi di schema soltanto all’account che esegue le migrazioni, se necessario. Non servono un secondo account localhost né FLUSH PRIVILEGES dopo CREATE USER e GRANT.

Il requisito SSL presuppone TLS configurato sul server; il client dovrebbe verificare anche certificato e identità del server. Il file di configurazione e il servizio da riavviare dipendono dall’installazione. Una modifica agli utenti SQL non richiede un riavvio.

Rete e prova dal client

Nel file di configurazione letto da mysqld, sotto [mysqld], imposta bind-address all’indirizzo del server sulla rete privata. Verifica che sia realmente assegnato alla macchina. Se cambi questa impostazione, riavvia MySQL in una finestra prevista e controlla ss -ltn: la porta 3306 deve ascoltare sull’indirizzo scelto. Nel firewall consenti soltanto l’IP client verso quella porta.

mysql --protocol=tcp -h db.example -u app -p \
  --ssl-mode=VERIFY_IDENTITY --ssl-ca=/percorso/ca.pem applicazione \
  -e "SELECT CURRENT_USER(); SHOW SESSION STATUS LIKE 'Ssl_cipher';"

db.example deve risolvere all’indirizzo del server e corrispondere al certificato. Devi vedere l’account previsto e un valore non vuoto per Ssl_cipher. Un timeout indica rete o firewall; Access denied indica account/host/password; un errore di certificato richiede di correggere CA o nome host, non disabilitare la verifica.

Fonti e approfondimenti