Anda perlu menyambungkan program meja ke basis data di sebuah server. Cara cepatnya - mengikat ke semua alamat lalu membuka portanya - menaruh basis data Anda di hadapan seluruh internet, tempat para pemindai menemukannya dalam hitungan jam. Ada cara yang lebih baik dan tidak lebih lama.

Jawaban yang benar: sebuah terowongan SSH

ssh -N -L 3307:127.0.0.1:3306 sara@server.example.com

# then point the client at:
#   host 127.0.0.1   port 3307

Basis datanya tetap menyimak di localhost saja, tak ada yang dibuka di tembok api, dan sambungannya dienkripsi SSH. Setiap program meja - TablePlus, DBeaver, Sequel Ace, MySQL Workbench - sudah memuat ini sebagai pilihan SSH.

Pastikan ia belum telanjur tersingkap

sudo ss -tlnp | grep 3306
# 127.0.0.1:3306  good
# 0.0.0.0:3306    exposed
# /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1

Kalau ia memang harus terjangkau

Misalnya sebuah server aplikasi di pusat data lain. Maka: sebuah jaringan pribadi kalau penyedianya menyediakan, sebuah aturan tembok api yang menyebut alamat asalnya dengan tepat, seorang pengguna yang dibatasi pada host itu, dan TLS yang diwajibkan.

sudo ufw allow from 203.0.113.20 to any port 3306 proto tcp

CREATE USER 'app'@'203.0.113.20' IDENTIFIED BY '...' REQUIRE SSL;
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'app'@'203.0.113.20';
Jangan sekali-kali membuat pengguna dengan kartu bebas pada bagian host - hak untuk 'app'@'%' berarti dari mana pun di muka bumi. Inilah sebab tunggal yang paling umum sebuah basis data direbut, dan ia hanya satu karakter.

Periksa apa yang sudah ada

SELECT user, host FROM mysql.user ORDER BY host;

Setiap baris dengan % di kolom host layak dijelaskan. Lihat pengguna dan hak, tanpa memberi berlebihan.