In generale, è necessario configurare il server del database per ascoltare la connessione al database su un socket di dominio Unix o per ascoltare solo su localhost. MySQL non deve essere configurato per l'ascolto su un indirizzo IP esterno o, peggio, per l'ascolto su tutti gli indirizzi, a meno che l'utente regolare del database (di solito un'applicazione Web) non sia in esecuzione sulla stessa macchina. E se l'applicazione è remota, ci sono un certo numero di cose che devi considerare.
Il modo in cui lo fai è impostare la configurazione dell'indirizzo di bind sull'indirizzo di loopback (127.0.0.1). Se lo fai, nessuno può connettersi a MySQL da remoto, a meno che non abbiano già una connessione al server (ad esempio SSH) e crei una connessione "locale" da lì. In questo caso, ti affidi a SSH per eseguire la crittografia e l'autenticazione e il sistema operativo non instradare i pacchetti remoti che arrivano all'indirizzo di loopback all'applicazione. Inoltre, è possibile configurare MySQL in modo che richieda password / autenticazione, per impedire agli utenti locali e non privilegiati di connettersi al database. Si noti che non è possibile limitare gli utenti privilegiati (root e qualcuno con accesso fisico non limitato). Inoltre, è possibile configurare un firewall host (ad esempio iptable in Linux) per limitare ulteriormente le porte aperte sul sistema.
È possibile eseguire l'amministrazione remota utilizzando l'inoltro locale SSH. Configurerai Workbench per la connessione alla porta locale della tua macchina locale e SSH inoltrerà tale connessione alla porta MySQL sul server.
Un altro modo per eseguire l'amministrazione remota è configurare PHPMyAdmin per l'ascolto su una porta HTTPS pubblica. In questa configurazione, ti affidi a PHPMyAdmin per eseguire l'autenticazione e HTTPS per la crittografia. Si noti che l'utilizzo di PHPMyAdmin tramite HTTP non crittografato non è sicuro, è necessario utilizzare HTTPS, anche PHPMyAdmin, sebbene conveniente, esponga una superficie di attacco di grandi dimensioni in quanto è un'applicazione PHP complessa. Ad esempio, potrebbe essere vulnerabile a CSRF o XSS.
Puoi proteggere ulteriormente PHPMyAdmin configurando il tuo webserver (ad esempio Apache) per richiedere un "certificato client TLS" per accedere all'applicazione PHPMyAdmin. In questa configurazione, ti baserai su Apache per l'autenticazione e HTTPS per la crittografia. Dovresti usarlo in combinazione con il meccanismo di autenticazione di PHPMyAdmin.
Se l'applicazione non è in esecuzione sulla stessa macchina del database (comune nei database con un numero elevato di utenti o condivisa da più applicazioni), è possibile consentire a MySQL di collegarsi all'indirizzo IP di una rete privilegiata. In questo modello di sicurezza, chiunque sia connesso alla rete privilegiata e sia autorizzato dall'amministratore di rete a inviare pacchetti IP al server di database è considerato affidabile. In questo caso, dipenderete dall'amministratore di rete del server. A meno che tu non abbia esperienza con il networking e si fidi di chiunque abbia configurato l'amministratore di rete e la configurazione del firewall, non lo consiglierei. L'amministrazione remota, in questo caso, verrebbe eseguita collegandosi alla rete privilegiata tramite una VPN. È necessario un firewall di rete che impedisca che le connessioni esterne alla rete privilegiata vengano indirizzate al server di database. In questa configurazione, l'autenticazione viene eseguita dal server VPN e dai router che impongono la tabella di routing LAN.
Inoltre, puoi configurare MySQL per richiedere un client TLS certificato . Con questa configurazione, anche il server MySQL esegue l'autenticazione. Questo può essere usato se non ti fidi completamente dell'amministratore di rete o se non ti fidi di tutti gli utenti della rete che possono connettersi al computer del database.
Infine, puoi esporre MySQL per associare a un indirizzo IP pubblico.
Non lo consiglio, poiché MySQL non è un'applicazione progettata per essere esposta su una porta pubblica (anche se MySQL può richiedere il certificato client TLS). Apache, sshd e gateway VPN, d'altra parte, sono progettati in modo che possano essere configurati per essere esposti in un indirizzo pubblico in modo sicuro.
Se non sai di averne bisogno, ti consiglio di non configurare MySQL per l'ascolto su un indirizzo non di loopback. E non vi è alcun motivo valido per esporre deliberatamente un server di database su un indirizzo IP pubblico per un certo periodo di tempo. Questo può essere considerato solo errata configurazione o incompetenza.
Non dovresti aver bisogno di SOCKS (OpenSSH Dynamic forwarding). SOCKS è utile solo se si dispone di un numero elevato di computer di destinazione e non si desidera configurare quale porta locale va dove. In questo caso, hai una macchina target specifica, che è il tuo server database sulla porta del database, quindi devi solo inoltrarla.