Databáza patrí medzi najdôležitejšie časti každej Joomla stránky. Kým súbory šablóny alebo rozšírenia možno v prípade potreby znovu nahrať, v databáze sa nachádza samotný obsah webu, používateľské účty, nastavenia komponentov, konfigurácia rozšírení, menu, kategórie, relácie a množstvo ďalších údajov.
Ak útočník získa neoprávnený prístup k databáze, následky môžu byť vážne: od úniku údajov až po zmenu obsahu, vytvorenie administrátorského účtu alebo úplné poškodenie stránky. Preto by bezpečnosť databázy mala byť súčasťou celkového zabezpečenia Joomla webu.
Čo všetko Joomla ukladá do databázy?
Joomla používa relačnú databázu, typicky MySQL alebo MariaDB, na ukladanie väčšiny dynamických údajov stránky.
V databáze sa nachádzajú napríklad:
- články a kategórie,
- používateľské účty,
- používateľské skupiny a oprávnenia,
- položky menu,
- moduly a ich nastavenia,
- konfigurácia pluginov a komponentov,
- značky a vlastné polia,
- údaje rozšírení tretích strán,
- niektoré záznamy relácií a systémových procesov.
Práve preto je databáza pri obnove webu rovnako dôležitá ako samotné súbory. Odborné materiály o Joomla upozorňujú, že databázu možno napríklad pomocou phpMyAdmin exportovať do SQL súboru, čo je dôležitá súčasť zálohovania.
Databázové prihlasovacie údaje chráňte rovnako ako administrátorské heslo
Počas inštalácie Joomla zadávate:
- názov databázového servera,
- názov databázy,
- databázového používateľa,
- heslo používateľa,
- prefix tabuliek.
Tieto informácie Joomla následne používa pri pripájaní k databáze.
Oficiálna dokumentácia uvádza, že hlavné konfiguračné údaje webu vrátane databázových prihlasovacích údajov sa nachádzajú v súbore configuration.php v koreňovom adresári Joomla.
Pre správcu z toho vyplýva zásadné pravidlo:
Kto získa obsah súboru configuration.php, môže potenciálne získať aj údaje potrebné na prístup k databáze.
Preto:
- neumiestňujte jeho kópie do verejne dostupného adresára,
- neposielajte ho nezašifrovaným e-mailom,
- nevytvárajte verejne dostupné zálohy typu
configuration.php.old, - kontrolujte oprávnenia súborov,
- uchovávajte FTP/SFTP a hostingové prístupy bezpečne.
Používajte samostatného databázového používateľa
Na produkčnom webe by Joomla nemala pracovať pod databázovým účtom root.
Pre konkrétnu Joomla inštaláciu je vhodné vytvoriť samostatného databázového používateľa, ktorý má prístup iba k databáze daného webu.
Prakticky to znamená napríklad:
mojcms_user → databáza mojcms_db
a nie:
root → všetky databázy servera
Výhoda je jednoduchá. Ak dôjde ku kompromitácii jedného webu, útočník nezíska automaticky prístup ku všetkým ostatným databázam na serveri.
Pri vytváraní databázy Joomla dokumentácia rovnako pracuje s konceptom samostatného databázového používateľa a upozorňuje na potrebu chrániť databázové účty heslom.
Zásada najnižších potrebných oprávnení
Databázový účet by mal mať iba také oprávnenia, ktoré Joomla potrebuje na svoju prevádzku.
Ak prevádzkujete vlastný server, vyhnite sa zbytočne širokým oprávneniam typu:
prístup ku všetkým databázam zo všetkých hostiteľov.
Na bežnom zdieľanom hostingu nastavuje veľkú časť týchto obmedzení poskytovateľ automaticky.
Používajte silné a jedinečné databázové heslo
Heslo databázového používateľa by malo byť:
- dlhé,
- náhodne generované,
- jedinečné,
- nepoužívané nikde inde.
Nie je potrebné, aby ste si ho pamätali. Joomla ho používa automaticky pri databázovom spojení.
Nevhodné heslá sú napríklad:
joomla123
database
firma2026
admin123456
Lepšie je použiť náhodný reťazec vytvorený správcom hesiel alebo hostingovým systémom.
Ak databázové heslo zmeníte na serveri, musíte príslušnú hodnotu upraviť aj v konfigurácii Joomla. Staršia oficiálna dokumentácia Joomla túto väzbu opisuje priamo pri nastaveniach databázy.
SQL injection: jedna z najvážnejších databázových hrozieb
Pri databázovej bezpečnosti sa často stretávame s pojmom SQL injection.
Ide o typ útoku, pri ktorom sa útočník pokúsi prostredníctvom nevhodne spracovaného vstupu ovplyvniť SQL dotaz odosielaný do databázy.
Dôsledkom môže byť napríklad:
- čítanie údajov, ku ktorým používateľ nemá mať prístup,
- zmena databázových údajov,
- obchádzanie aplikačnej logiky,
- získanie citlivých informácií.
Dokumentácia Joomla venovaná bezpečnosti rozšírení uvádza SQL injection medzi hlavnými rizikami, pred ktorými musí byť kód chránený.
Ako môže taká chyba vzniknúť?
Nebezpečný princíp vyzerá zjednodušene napríklad takto:
$value = $_GET['value'];
$query = "SELECT * FROM #__table WHERE id = $value";
Ak aplikácia bez kontroly vloží používateľský vstup priamo do SQL dotazu, útočník sa môže pokúsiť zmeniť význam dotazu.
Dokumentácia Joomla preto odporúča používať databázové API, správne typovanie, filtrovanie vstupu a viazanie parametrov namiesto manuálneho skladania SQL dotazov.
Pre bežného správcu je však dôležitejší praktický záver:
Nevytvárajte bezpečnosť databázy iba konfiguráciou servera. Aktuálny musí byť aj samotný CMS a všetky rozšírenia, ktoré s databázou pracujú.
Ani samotné jadro Joomla nie je bez chýb
SQL injection nie je iba teoretické riziko zastaraných alebo nekvalitných rozšírení.
Joomla Security Centre eviduje aj prípady, keď bola podobná zraniteľnosť objavená priamo v jadre Joomla.
Napríklad vo februári 2025 bola opravená SQL injection zraniteľnosť v komponente Scheduled Tasks, ktorá postihovala určité vydania Joomla 4 a Joomla 5.
V máji 2026 bola zase opravená autentifikovaná blind SQL injection chyba v Smart Search (com_finder) v Joomla 5.4.0–5.4.5 a 6.0.0–6.1.0.
V rovnakom období Joomla Security Strike Team opravil aj SQL injection problém v komponente Tags (com_tags) ovplyvňujúci Joomla 4.0.0–5.4.5 a 6.0.0–6.1.0.
Tieto príklady ukazujú, prečo je pravidelné aktualizovanie Joomla jednou z najdôležitejších súčastí ochrany databázy.
Aktualizujte rozšírenia, ktoré pracujú s databázou
Komponenty tretích strán často vytvárajú vlastné databázové tabuľky a intenzívne pracujú s údajmi.
Môžu to byť napríklad:
- e-shopy,
- rezervačné systémy,
- formulárové komponenty,
- členské systémy,
- diskusné fóra,
- newsletterové systémy,
- katalógy,
- page buildery.
Ak takéto rozšírenie obsahuje SQL injection chybu, aktualizované jadro Joomla nemusí útoku zabrániť.
Preto pravidelne kontrolujte:
- dostupné aktualizácie,
- stav podpory rozšírenia,
- kompatibilitu s používanou Joomla,
- bezpečnostné oznámenia výrobcu,
- či rozšírenie stále reálne potrebujete.
Nepoužívané komponenty je vhodnejšie odinštalovať, nie iba deaktivovať.
Prefix databázových tabuliek: pomocná, nie hlavná ochrana
Pri inštalácii Joomla sa používa prefix databázových tabuliek.
Tabuľka používateľov preto môže vyzerať napríklad:
abc12_users
a články:
abc12_content
Namiesto kedysi často používaného:
jos_users
Samotný náhodný prefix však nie je plnohodnotný bezpečnostný mechanizmus.
Moderný útok by nemal byť úspešný len preto, že útočník pozná názov databázovej tabuľky. Základom ochrany zostáva bezpečný aplikačný kód, aktualizácie a správne databázové oprávnenia.
Prefix možno preto vnímať skôr ako doplnkovú vrstvu a praktický identifikátor tabuliek, nie ako náhradu bezpečnostných opatrení.
Chráňte phpMyAdmin a databázovú administráciu
Mnohé hostingy umožňujú správu databázy cez phpMyAdmin.
Ide o mimoriadne výkonný nástroj.
Ak niekto získa prístup do phpMyAdmin, môže podľa svojich databázových oprávnení napríklad:
- čítať tabuľky,
- meniť údaje,
- odstraňovať tabuľky,
- importovať SQL,
- exportovať celú databázu.
Preto je veľmi dôležité chrániť predovšetkým hostingový účet, cez ktorý je phpMyAdmin dostupný.
Používajte:
- silné jedinečné heslo,
- MFA, ak ho hosting podporuje,
- oddelené účty správcov,
- zabezpečené zariadenie,
- HTTPS.
Ak prevádzkujete vlastný server, phpMyAdmin by nemal byť bez ďalších obmedzení verejne vystavený na predvídateľnej adrese.
Databázový server zbytočne nevystavujte internetu
Na bežnom Joomla hostingu býva databázový server dostupný iba lokálne, napríklad cez:
localhost
To je z bezpečnostného hľadiska výhodné.
Ak databázu nepotrebujete spravovať vzdialene, nie je dôvod poskytovať MySQL alebo MariaDB verejne na internet.
Pri vlastnom VPS alebo serveri preto skontrolujte:
- na akom rozhraní databáza počúva,
- firewall,
- povolené IP adresy,
- databázových používateľov a hostiteľov,
- či je vzdialený prístup vôbec potrebný.
Ak vzdialený prístup potrebujete, vhodnejšie je použiť bezpečné obmedzenie IP adries, VPN alebo SSH tunel než ponechať databázovú službu otvorenú celému internetu.
Zálohovanie databázy je súčasť bezpečnosti
Bezpečnosť neznamená iba zabrániť úniku údajov.
Rovnako dôležitá je ich dostupnosť a obnoviteľnosť.
Databázu môžete stratiť napríklad v dôsledku:
- hackerského útoku,
- chyby rozšírenia,
- poškodenia databázových tabuliek,
- chybnej aktualizácie,
- administrátorskej chyby,
- poruchy hostingu.
Preto by ste mali pravidelne vytvárať kompletné zálohy obsahujúce:
súbory Joomla + databázu.
Samotná kópia súborov webu nestačí.
Ak máte uložené všetky PHP súbory a obrázky, ale stratíte databázu, stratíte veľkú časť obsahu a konfigurácie webu.
Ako často databázu zálohovať?
Frekvencia zálohovania by mala zodpovedať tomu, ako často sa údaje menia.
Malý prezentačný web
Ak sa obsah mení iba párkrát mesačne:
denná alebo týždenná automatická záloha je spravidla dostatočná.
Aktívny magazín
Ak články pribúdajú denne:
minimálne denná záloha.
E-shop alebo rezervačný systém
Nové údaje môžu vznikať nepretržite.
V takom prípade môže byť potrebné:
- viacero záloh denne,
- priebežné databázové zálohovanie,
- zálohovacia služba hostingu.
Čím väčšia je cena straty posledných hodín údajov, tým kratší by mal byť interval medzi zálohami.
Zálohu databázy neukladajte iba na rovnakom serveri
Častou chybou je:
/public_html/backups/site.sql
Takéto riešenie prináša dva problémy.
Po prvé, pri kompromitácii servera môže útočník získať aj zálohu.
Po druhé, SQL dump môže obsahovať množstvo citlivých údajov.
Ak je navyše omylom dostupný cez web, môže vzniknúť mimoriadne vážny bezpečnostný incident.
Preto zálohy ukladajte:
- mimo verejného webového adresára,
- na iný server,
- do bezpečného cloudového úložiska,
- na lokálne úložisko správcu,
- ideálne vo viacerých nezávislých kópiách.
Citlivé zálohy je vhodné aj šifrovať.
Pravidelne testujte obnovu databázy
Záloha má hodnotu iba vtedy, keď ju dokážete obnoviť.
Aspoň niekoľkokrát ročne preto vykonajte testovaciu obnovu na:
- lokálnej Joomla inštalácii,
- staging serveri,
- dočasnej subdoméne.
Kontrolujte najmä:
- či SQL export nie je poškodený,
- či obsahuje všetky tabuľky,
- či sa databáza úspešne importuje,
- či Joomla po obnove funguje.
Databázový export možno vytvárať aj pomocou phpMyAdmin, čo uvádzajú aj Joomla materiály vo vašej knižnici.
Pozor na databázové zálohy po napadnutí webu
Ak zistíte kompromitáciu Joomla stránky, automaticky nepredpokladajte, že najnovšia databázová záloha je čistá.
Útočník mohol napríklad:
- vytvoriť nový používateľský účet,
- zmeniť konfiguráciu rozšírenia,
- vložiť škodlivý obsah do článkov,
- pridať údaje do tabuliek napadnutého komponentu.
Preto pri obnove po bezpečnostnom incidente treba posudzovať nielen súbory, ale aj stav databázy v čase zálohy.
Staršia overene čistá záloha môže mať v takom prípade vyššiu hodnotu než najnovšia kompromitovaná záloha.
Needitujte databázu bez dôvodu
phpMyAdmin umožňuje meniť prakticky akýkoľvek údaj v Joomla. To však neznamená, že je vhodné ho používať na bežnú správu webu.
Priamy zásah do databázy môže:
- porušiť väzby medzi tabuľkami,
- poškodiť konfiguráciu,
- obísť aplikačné kontroly Joomla,
- spôsobiť nekonzistentné údaje.
Na bežné operácie preto používajte administráciu Joomla.
Priamy zásah do databázy má zmysel najmä:
- pri diagnostike,
- pri migrácii,
- pri oprave špecifického problému,
- pri obnove prístupu podľa overeného postupu.
Oficiálna dokumentácia napríklad opisuje možnosť resetovať administrátorské heslo priamo cez databázu v prípade, že bežný spôsob obnovy nie je dostupný.
Pred takým zásahom si však vždy vytvorte zálohu.
Kontrolujte databázu po odinštalovaní rozšírení
Niektoré Joomla rozšírenia pri odinštalovaní odstránia vlastné databázové tabuľky, iné ich ponechajú, aby používateľ neprišiel o údaje.
Po rokoch prevádzky preto môže databáza obsahovať množstvo tabuliek po dávno odstránených komponentoch.
Nie je rozumné ich automaticky mazať.
Postupujte takto:
- vytvorte zálohu,
- zistite, ktoré rozšírenie tabuľku vytvorilo,
- overte, či rozšírenie už nie je používané,
- až potom zvážte odstránenie.
Pri nejasnom pôvode tabuľky je bezpečnejšie ju ponechať než riskovať poškodenie fungujúceho systému.
Sledujte veľkosť databázy
Neobvykle rastúca databáza nemusí znamenať útok, môže však upozorniť na problém.
Veľký objem údajov môžu vytvárať napríklad:
- logy,
- relácie,
- Smart Search index,
- štatistické rozšírenia,
- formulárové komponenty,
- cache tabuľky,
- bezpečnostné rozšírenia.
Raz za čas sa preto oplatí pozrieť na veľkosť jednotlivých tabuliek.
Ak jedna tabuľka zrazu narastie zo 100 MB na niekoľko GB, treba zistiť príčinu.
Ak prevádzkujete viac Joomla webov, databázy oddeľte
Pri niekoľkých Joomla inštaláciách na jednom hostingu je vhodné používať:
web A → databáza A → používateľ A
web B → databáza B → používateľ B
web C → databáza C → používateľ C
Namiesto jedného používateľa s prístupom ku všetkým databázam.
Toto oddelenie obmedzuje rozsah možného incidentu.
Ak je kompromitovaný web A, údaje získané z jeho configuration.php by nemali automaticky poskytovať prístup k databázam webov B a C.
Čo robiť, ak máte podozrenie na kompromitáciu databázy?
Ak sa objavia nevysvetliteľné zmeny údajov alebo podozrenie na SQL injection, nereagujte iba zmenou databázového hesla.
Odporúčaný postup je:
- Obmedzte prístup k webu, ak prebieha aktívny útok.
- Vytvorte forenznú kópiu súčasného stavu, ak je to možné.
- Skontrolujte Joomla a všetky rozšírenia.
- Preverte bezpečnostné oznámenia.
- Analyzujte serverové access a error logy.
- Skontrolujte používateľské účty a administrátorské oprávnenia.
- Preverte databázu na neočakávané zmeny.
- Zmeňte kompromitované prístupové údaje.
- Aktualizujte alebo odstráňte zraniteľnú súčasť.
- Obnovte systém z overene čistej zálohy, ak je to potrebné.
Zmena hesla sama osebe nepomôže, ak na stránke zostane zraniteľný komponent, ktorý umožnil útok.
Praktický checklist bezpečnosti databázy Joomla
- Joomla používa samostatného databázového používateľa.
- Databázový používateľ nemá zbytočne široké oprávnenia.
- Databázové heslo je silné a jedinečné.
- Súbor
configuration.phpje bezpečne chránený. - Na serveri nie sú verejne dostupné kópie
configuration.php. - MySQL/MariaDB nie je bez potreby dostupná z internetu.
- Hostingový účet a phpMyAdmin sú chránené silným heslom a MFA.
- Joomla je aktualizovaná.
- Všetky komponenty a pluginy sú aktualizované.
- Nepoužívané rozšírenia sú odstránené.
- Databáza sa pravidelne zálohuje.
- Záloha databázy sa uchováva mimo webového servera.
- Zálohy sú pravidelne testované obnovou.
- SQL súbory nie sú uložené vo verejnom adresári.
- Viaceré Joomla weby používajú oddelené databázové účty.
- Raz za čas sa kontroluje veľkosť databázových tabuliek.
Bezpečnosť databázy nie je jedna funkcia
V administrácii Joomla nenájdete tlačidlo „Zabezpečiť databázu“. Ochrana databázy vzniká kombináciou viacerých vrstiev:
bezpečný hosting → správne databázové oprávnenia → silné heslo → chránený configuration.php → aktuálna Joomla → aktuálne rozšírenia → ochrana proti SQL injection → zálohovanie → kontrola a monitoring.
Aktualizácie sú pritom mimoriadne dôležité. Joomla Security Centre priebežne zverejňuje vyriešené bezpečnostné problémy a SQL injection patrí medzi chyby, ktoré sa v minulosti aj v roku 2026 skutočne objavili.
Databázu preto netreba vnímať iba ako technickú súčasť systému ukrytú za Joomla administráciou. Je to miesto, kde sa nachádza veľká časť hodnoty celého webu.
Ak stratíte šablónu, môžete ju znovu nainštalovať. Ak stratíte alebo niekto neoprávnene zmení databázu bez použiteľnej zálohy, obnova môže byť podstatne komplikovanejšia.
Pravidelná údržba databázy, bezpečné prístupové údaje, aktualizácie a spoľahlivé zálohovanie preto patria medzi základné povinnosti každého správcu Joomla stránky.
