sql >> Database >  >> RDS >> MariaDB

MySQL versus MariaDB versus Percona Server:vergelijking van beveiligingsfuncties

Beveiliging van gegevens is van cruciaal belang voor elke organisatie. Het is een belangrijk aspect dat het ontwerp van de databaseomgeving sterk kan beïnvloeden. Wanneer u beslist welke MySQL-smaak u wilt gebruiken, moet u rekening houden met de beveiligingsfuncties die beschikbaar zijn bij de verschillende serverleveranciers. In deze blogpost komen we met een korte vergelijking van de nieuwste versies van de MySQL Community Edition van Oracle, Percona Server en MariaDB:

mysqld  Ver 5.7.20-19 for Linux on x86_64 (Percona Server (GPL), Release 19, Revision 3c5d3e5d53c)
mysqld  Ver 5.7.21 for Linux on x86_64 (MySQL Community Server (GPL))
mysqld  Ver 10.2.12-MariaDB for Linux on x86_64 (MariaDB Server)

We gaan Centos 7 als besturingssysteem gebruiken - houd er rekening mee dat de resultaten die we hier presenteren enigszins kunnen verschillen bij andere distributies zoals Debian of Ubuntu. We willen ons ook concentreren op de verschillen en zullen de overeenkomsten niet behandelen - Percona Server en MariaDB zijn smaken van MySQL, dus sommige beveiligingsfuncties (bijvoorbeeld hoe toegangsprivileges van MySQL-bestanden eruit zien) worden onderling gedeeld.

Initiële beveiliging

Gebruikers

Zowel Percona Server als MySQL Community Server wordt geleverd met een willekeurig gegenereerd tijdelijk wachtwoord voor de rootgebruiker. U moet de inhoud van het foutenlogboek van MySQL controleren om het te vinden:

2018-01-19T13:47:45.532148Z 1 [Note] A temporary password is generated for [email protected]: palwJu7uSL,g

Zodra u zich aanmeldt, wordt u gedwongen een wachtwoord te wijzigen:

[[email protected] ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.21

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select * from mysql.user;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Wachtwoord moet sterk genoeg zijn, dit wordt afgedwongen door de valid_password plugin:

mysql> alter user [email protected] identified by 'password123.';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> alter user [email protected] identified by 'password123.A';
Query OK, 0 rows affected (0.00 sec)

MariaDB genereert geen willekeurig root-wachtwoord en biedt wachtwoordloze toegang tot het root-account van (en alleen van) localhost.

[[email protected] ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.2.12-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| [email protected] |
+----------------+
1 row in set (0.00 sec)

Dit is geen groot probleem tijdens de initiële implementatiefase, aangezien de DBA de toegang tot de database later moet configureren en beveiligen (door bijvoorbeeld mysql_secure_installation uit te voeren). Het grotere probleem hier is dat een goede praktijk niet wordt afgedwongen door MariaDB. Als je geen sterk wachtwoord hoeft in te stellen voor de rootgebruiker, kan het zijn dat niemand het later verandert en blijft wachtwoordloze toegang behouden. Dan zou dit een serieuze bedreiging voor de veiligheid worden.

Een ander aspect waar we naar willen kijken, is anonieme, wachtwoordloze toegang. Anonieme gebruikers laten iedereen binnen, het hoeft geen vooraf gedefinieerde gebruiker te zijn. Als dergelijke toegang zonder wachtwoord is, betekent dit dat iedereen verbinding kan maken met MySQL. Gewoonlijk heeft zo'n account alleen GEBRUIKSprivilege, maar zelfs dan is het mogelijk om een ​​status ('\s') af te drukken die informatie bevat zoals MySQL-versie, tekenset enz. Bovendien, als het 'testschema' beschikbaar is, heeft een dergelijke gebruiker de mogelijkheid om schrijf naar dat schema.

Zowel MySQL Community Server als Percona-server hebben geen anonieme gebruikers gedefinieerd in MySQL:

mysql> select user, host, authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *EB965412B594F67C8EB611810EF8D406F2CF42BD |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+---------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

Aan de andere kant staat MariaDB open voor anonieme, wachtwoordloze toegang.

MariaDB [(none)]> select user,host,password from mysql.user;
+------+-----------------------+----------+
| user | host                  | password |
+------+-----------------------+----------+
| root | localhost             |          |
| root | localhost.localdomain |          |
| root | 127.0.0.1             |          |
| root | ::1                   |          |
|      | localhost             |          |
|      | localhost.localdomain |          |
+------+-----------------------+----------+
6 rows in set (0.00 sec)

Daarnaast is het 'test'-schema beschikbaar - waarmee anonieme gebruikers schrijfacties naar de database kunnen uitvoeren.

[[email protected] ~]# mysql -umyanonymoususer
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 14
Server version: 10.2.12-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use test;
Database changed
MariaDB [test]> CREATE TABLE mytab (a int);
Query OK, 0 rows affected (0.01 sec)

MariaDB [test]> INSERT INTO mytab VALUES (1), (2);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [test]> SELECT * FROM mytab;
+------+
| a    |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

Dit vormt een ernstige bedreiging en moet worden opgelost. Anders kan het gemakkelijk worden misbruikt om te proberen de server te overbelasten met schrijfbewerkingen.

Gegevens in transitbeveiliging

MySQL Community Server en beide vorken ondersteunen het gebruik van SSL om gegevens tijdens het transport te versleutelen. Dit is uiterst belangrijk voor Wide Area Networks, maar mag ook niet over het hoofd worden gezien in een lokaal netwerk. SSL kan zowel client- als serverside worden gebruikt. Wat betreft de configuratie aan de serverzijde (om bijvoorbeeld verkeer van master naar slaves te versleutelen), ziet het er over de hele linie identiek uit. Er is echter een verschil als het gaat om SSL-codering aan de clientzijde, geïntroduceerd in MySQL 5.7. Vóór 5.7 moest men SSL-sleutels en CA's genereren en deze definiëren in de configuraties van zowel server als client. Zo ziet de 10.2 SSL-configuratie van MariaDB eruit. Zowel in MySQL Community Server 5.7 als in Percona Server 5.7 (die is gebaseerd op MySQL 5.7) is het niet nodig om vooraf sleutels te genereren. Het gebeurt allemaal automatisch, op de achtergrond. Het enige dat u hoeft te doen is SSL op uw client in te schakelen door de juiste '--ssl-mode' in te stellen. Voor de CLI-client van MySQL is dit niet eens nodig omdat SSL standaard wordt ingeschakeld:

[[email protected] ~]# mysql -p -h127.0.0.1
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.21 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.21, for Linux (x86_64) using  EditLine wrapper

Connection id:        6
Current database:
Current user:        [email protected]
SSL:            Cipher in use is DHE-RSA-AES256-SHA
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        5.7.21 MySQL Community Server (GPL)
Protocol version:    10
Connection:        127.0.0.1 via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:        3306
Uptime:            2 days 21 hours 51 min 52 sec

Threads: 1  Questions: 15  Slow queries: 0  Opens: 106  Flush tables: 1  Open tables: 99  Queries per second avg: 0.000
--------------

Aan de andere kant zou MariaDB extra configuratie nodig hebben, aangezien SSL standaard is uitgeschakeld:

[[email protected] ~]# mysql -h127.0.0.1
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 18
Server version: 10.2.12-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> \s
--------------
mysql  Ver 15.1 Distrib 10.2.12-MariaDB, for Linux (x86_64) using readline 5.1

Connection id:        18
Current database:
Current user:        [email protected]
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server:            MariaDB
Server version:        10.2.12-MariaDB MariaDB Server
Protocol version:    10
Connection:        127.0.0.1 via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:        3306
Uptime:            2 days 22 hours 26 min 58 sec

Threads: 7  Questions: 45  Slow queries: 0  Opens: 18  Flush tables: 1  Open tables: 12  Queries per second avg: 0.000
--------------

Versleuteling van gegevens in rust

Allereerst back-ups - er zijn gratis beschikbare back-uptools zoals xtrabackup of MariaDB Backup (wat een afsplitsing is van xtrabackup). Hiermee kunnen gecodeerde back-ups worden gemaakt van alle drie de MySQL-smaken die we in deze blogpost bespreken.

Alle drie de smaken ondersteunen versleuteling van de actieve database, maar er zijn verschillen in welke gegevens worden versleuteld.

De MySQL Community Server ondersteunt alleen codering van InnoDB-tabelruimten. Sleutels die worden gebruikt voor codering worden opgeslagen in bestanden (wat niet in overeenstemming is met de regelgeving - sleutels moeten in een kluis worden bewaard - iets dat MySQL Enterprise ondersteunt). Percona Server is gebaseerd op MySQL Community Server en ondersteunt dus ook de versleuteling van InnoDB-tabelruimten. Onlangs is in Percona Server 5.7.20 ondersteuning toegevoegd voor encryptie van algemene tabelruimten (vergeleken met alleen individuele in eerdere versies en MySQL Community Edition). Ondersteuning voor versleuteling van binaire logboeken is ook toegevoegd. Percona Server wordt geleverd met een keyring_vault-plug-in, die kan worden gebruikt om sleutels op te slaan in de Hashicorp Vault-server, waardoor Percona Server 5.7.20 voldoet aan de wettelijke vereisten met betrekking tot data-at-rest-codering.

MariaDB 10.2 heeft meer geavanceerde ondersteuning voor data-at-rest-codering. Naast tablespace en binaire/relay log-encryptie, heeft het ondersteuning voor het versleutelen van InnoDB redo logs. Momenteel is het de meer complete oplossing met betrekking tot gegevensversleuteling.

Auditregistratie

Alle drie de MySQL-smaken hebben ondersteuning voor auditlogging. Hun reikwijdte is vrijwel vergelijkbaar:gebeurtenissen verbinden en loskoppelen, uitgevoerde query's, geopende tabellen. De logboeken bevatten informatie over welke gebruiker heeft deelgenomen aan een dergelijke gebeurtenis, vanaf welke host de gebruiker heeft ingelogd, het tijdstip waarop dit is gebeurd en soortgelijke informatie. Dergelijke gebeurtenissen kunnen ook worden vastgelegd via syslog en worden opgeslagen op een externe logserver om loganalyse en -parsing mogelijk te maken.

Gegevensmaskering, SQL-firewall

Alle besproken MySQL-smaken werken met een soort tool waarmee gegevensmaskering kan worden geïmplementeerd en die SQL-verkeer kan blokkeren op basis van enkele regels. Gegevensmaskering is een methode om bepaalde gegevens buiten de database te verbergen, maar voordat deze de klant bereiken. Een voorbeeld zijn creditcardgegevens die in platte tekst in de database worden opgeslagen, maar wanneer een ontwikkelaar dergelijke gegevens wil opvragen, ziet ze 'xxxxxxxx...' in plaats van cijfers. De tools waar we het hier over hebben zijn ProxySQL en MaxScale. MaxScale is een product van MariaDB Corporation en is gebaseerd op abonnementen. ProxySQL is een gratis te gebruiken databaseproxy. Beide proxy's kunnen worden gebruikt met elk van de MySQL-smaken.

Dat is alles voor vandaag mensen. Bekijk voor meer informatie deze 10 tips voor het beveiligen van uw MySQL- en MariaDB-databases.


  1. SQL :TUSSEN vs <=en>=

  2. Een tekenreeks converteren naar een datum/tijd in SQL Server met behulp van CAST()

  3. Multi-DC PostgreSQL:een stand-byknooppunt instellen op een andere geografische locatie via een VPN

  4. Waarden selecteren die aan verschillende voorwaarden voldoen op verschillende rijen?