Vzdialený prístup k databáze: ako ju nevystaviť celému internetu
Dva spôsoby pripojenia k databáze na VDS z pracovného počítača: SSH tunel a otvorený port s obmedzeniami. Čo si vybrať a ako to overiť.
Aktualizované 23. augusta 2026
Databáza, ktorá počúva na 0.0.0.0 s heslom root, prežije len do prvého skenu — a celý rozsah adries je skenovaný nepretržite. Zároveň je pohodlné a často nevyhnutné pripojiť sa k databáze z notebooku s klientom. Existujú dva spôsoby a len jeden z nich nemá žiadne nevýhody.
Spôsob 1: SSH tunel (odporúčaný)
Databáza zostáva naviazaná na 127.0.0.1 a navonok nie je vystavené nič okrem SSH. Na svojom počítači:
ssh -L 5433:127.0.0.1:5432 root@YOUR_ADDRESS -N
ssh -L 3307:127.0.0.1:3306 root@YOUR_ADDRESS -N
Teraz sa pripoj na 127.0.0.1:5433 v DBeaver, TablePlus alebo psql. Z pohľadu databázy to vyzerá ako lokálne pripojenie.
Väčšina klientov si tunel nastaví sama: v nastaveniach pripojenia je karta „SSH“. Zadaj adresu stroja z „Prehľadu“ ovládacieho panela /hosting/vds/m/<id> a svoj kľúč.
Výhoda tohto spôsobu: nemusíš meniť nič v konfigurácii databázy ani firewallu.
Spôsob 2: otvorený port s obmedzeniami
Toto je krajné riešenie — pre prípad, keď sa pripája externá služba so známou statickou adresou. Každý krok nižšie je povinný:
ufw allow from 203.0.113.10 to any port 5432 proto tcp
Pre PostgreSQL: listen_addresses = '*' a riadok hostssl all all 203.0.113.10/32 scram-sha-256 v pg_hba.conf. Pre MySQL: bind-address = 0.0.0.0 a používateľ naviazaný na konkrétnu adresu:
CREATE USER 'app'@'203.0.113.10' IDENTIFIED BY 'long-password';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'app'@'203.0.113.10';
Bez TLS takéto pripojenie posiela dáta v čistom texte. ufw allow 5432 bez uvedenia zdroja je presne to, čo znamená „otvoriť to celému internetu“.
Overenie
Z iného stroja:
nmap -Pn -p 3306,5432,6379,27017 YOUR_ADDRESS
Očakávaná odpoveď je filtered alebo closed na všetkých portoch. Lokálne skontroluj, čo počúva a kde:
ss -tulpn | grep -E '3306|5432|6379'
Časté chyby
| Príznak | Príčina |
|---|---|
| Klient sa nepripojí cez tunel | Lokálny port je obsadený — vyber iný |
Host ... is not allowed to connect | Používateľ MySQL je naviazaný na localhost |
no pg_hba.conf entry for host | Neexistuje pravidlo pre tvoju adresu |
| Port je otvorený, ale nič neodpovedá | Databáza počúva len na 127.0.0.1 |
| Fungovalo, potom prestalo | Poskytovateľ ti dáva dynamickú adresu — ďalší argument pre tunel |
Stroje nemajú IPv6 ani druhú adresu. Všetky pravidlá píš pre jedinú verejnú IPv4 adresu z „Prehľadu“ — nebudeš mať zmätok s dvomi stackmi.