Teeme andmebaasiühendused turvalisemaks
Teatavasti on SQL andmebaaside kasutajatel vaikeseadistustes lubatud ühenduda ainult lokaalselt, mis tagab selle, et andmed ei liigu üle võõraste võrkude. Zones liiguvad andmed niisamuti vaikeseadistuses üle andmebaasi- ja veebiserveri vahelise sisevõrgu ning nõnda pole neil võimalik kuidagi “jooksu panna”. Kui aga kasutaja soovib ühenduda SQL baasiga väljastpoolt, siis on soovitav aktiveerida selleks turvalist ühendust võimaldav TLS protokoll, mis krüpteerib kogu andmeliikluse klientrakenduse ja andmebaasi serveri vahel.
Zone klientidel on juba pikemat aega olnud võimalus seadistada oma rakendusi kasutama turvalist TLS ühendust. Kuivõrd andmebaasides on enamasti selline info, mis ei tohi lekkida ning selles seas ka palju tundlikke isikuandmeid, siis tuleb erilist tähelepanu pöörata just nende andmete käitlemise turvalisusele. Seetõttu saab ka Zones nüüd teha krüpteeritud ühenduse tingimuse kasutajatele kohustuslikuks. Allpool sellest pisut lähemalt.
Milleks mulle krüpteeritud SQL ühendus?
Reeglina peab turvalist TLS ühendust kasutama väliste ühenduste puhul, eeskätt olukorras, kui rakendus asub väljaspool Zone süsteemi. Näiteks siis, kui SQL serveriga on ühendatud mõni väline teenus, mis asub mõne teise teenusepakkuja pilves. Sellises olukorras pruugib piisata rakenduse administraatori teadmisest, et eelnevalt tuleb seadistada SSL ühendus. Küll aga tuleb sääraste väliste ühenduste puhul siiski ette olukordi, kus ühekordne seadistamine turvalist ühendust ei taga.
Sellistel puhkudel peab eriti tähelepanelik olema eeskätt siis, kui ligipääs on antud mõnele kasutajale, kes ühendub andmebaasiga nö desktop-rakenduse abil. Näiteks arendajate seas levinud Sequel Pro‘ga või pisut vähemtuntud Beekeeper Studio‘ga, mille kasutamisel tuleb kindlasti eelnevalt veenduda, et ühendus oleks TLS protokolliga krüpteeritud. Kuid mõistagi võib ette tulla olukordi, kus administraatoril puudub selle üle kontroll. Just selle välistamiseks ongi nüüd meil võimalik andmebaasi kasutajale määrata, et baasile pääseb ligi ainult üle TLS ühenduste. Selleks tuleb siseneda andmebaasi kasutaja haldusesse ja seadistada seal väärtus “Nõua kasutajalt TLS ühendust”.
MIlleks aga seda ikkagi vaja on? Mõnikord teeb tarkvara oma tööd nõnda, et sellel on vaja küsida arendajalt küsimusi stiilis “Ole hea, vaata järele, mis selle tellimusega andmebaasis toimub?”. Tänapäeval laialt levinud kaugtööd tehes võib arendaja andmebaasi vaadata kusagil kohvikus ning selle avalikus wifi’s. Kui sellises olukorras TLS ühendust ei kasutata, siis võib julgelt öelda, et tellimustega seotud isikuandmed on kolmandate isikute käest põhimõtteliselt läbi käinud.
Väliste ühenduste korral tuleb tähelepanu pöörata kindlasti ka sellele, et ühendusteed oleksid rangelt piiratud vaid lubatud IP-aadressidele. Seda tuleb niisamuti Minu Zone haldusliideses konkreetse andmebaasi kasutaja sätete juures seadistada. Oluline on teada, et krüpteeritud ühendust saab kasutada alates TLS protokolli versioonist 1.2. Juhime siiski tähelepanu sellele, et see võib takistuseks kujuneda vanematele rakendustele ja andmebaasiklientidele. Sestap tasub ka need võimaluse korral kaasajastada.
TLS kasutamine klientrakenduses
Desktop– ehk töölauaklientidel tuleb ühenduse seadistamisel paigutada õigesse kastikesse lithsalt vastav linnuke. Serverirakenduse seadistamiseks toome aga allpool mõned näited.
WordPress rakenduse puhul piisab faili wp-config.php ühe rea lisamisest:
define( 'MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL );
PHP skriptis PDO ühendust kasutades tuleb määrata MYSQL_ATTR_SSL_CA väärtus. Zone serveris näiteks:
try {
$db = new PDO(
'mysql:host=dXXX.mysql.zonevs.eu;dbname=$database;port=3306',
'{database_username}',
'{database_password}',
[
PDO::MYSQL_ATTR_SSL_CA =>
'/etc/ssl/zse/infernal/cacrt.d/MYSQL.ZONEVS.EU.crt'
]
);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch (PDOException $error) {
echo $error->getMessage();
}
NB! TLS 1.2 on toetatud alates PHP versioonist 7.2!
Käsurealt ühendamiseks MariaDB’d kasutavas serveris tuleb kasutada –ssl võtit
mysql -h dXXX.mysql.zonevs.eu -u {database_username} --ssl -p
Käsurealt ühendamiseks MySQL 8.0 kasutavas serveris tuleb kasutada –ssl-mode= võtit
mysql -h dXXX.mysql.zonevs.eu -u {database_username} --ssl-mode=REQUIRED -p
Eelnevad võtmed tulevad kasuks siis, kui on soov kasutada mysqldump funktsionaalsust näiteks siis, kui tahad teha MySQL’i varukoopiaid väljapoole Zone võrku.
Kuidas kontrollida, kas ühendus on krüpteeritud?
Olenemata kasutusmeetodist saad SSL ühenduse toimivust kontrollida SQL lausega:
SHOW STATUS LIKE 'Ssl_cipher';
TLS ühenduse korral peaks Ssl_cipher väärtuseks olema näiteks TLS_AES_256_GCM_SHA384. Kui see väärtus on tühi, siis TLS ühendust ei kasutata.