sql >> Databasteknik >  >> RDS >> MariaDB

MySQL vs MariaDB vs Percona Server:Jämförelse av säkerhetsfunktioner

Datasäkerhet är avgörande för alla organisationer. Det är en viktig aspekt som i hög grad kan påverka utformningen av databasmiljön. När du bestämmer dig för vilken MySQL-smak du ska använda måste du ta hänsyn till säkerhetsfunktionerna som finns tillgängliga från de olika serverleverantörerna. I det här blogginlägget kommer vi med en kort jämförelse av de senaste versionerna av MySQL Community Edition från Oracle, Percona Server och 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)

Vi kommer att använda Centos 7 som operativsystem - kom ihåg att resultaten vi presenterar här kan vara något annorlunda på andra distributioner som Debian eller Ubuntu. Vi skulle också vilja fokusera på skillnaderna och kommer inte att täcka de gemensamma egenskaperna - Percona Server och MariaDB är smaker av MySQL, så några av säkerhetsfunktionerna (t.ex. hur åtkomstprivilegier för MySQL-filer ser ut) delas mellan dem.

Initial säkerhet

Användare

Både Percona Server och MySQL Community Server kommer med ett slumpmässigt genererat temporärt lösenord för root-användaren. Du måste kontrollera innehållet i MySQL:s fellogg för att hitta den:

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

När du loggar in tvingas en lösenordsändring på dig:

[[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.

Lösenordet måste vara tillräckligt starkt, detta upprätthålls av plugin-programmet validate_password:

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 genererar inte ett slumpmässigt root-lösenord och det ger lösenordslös åtkomst till root-kontot från (och endast från) 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)

Detta är inte ett stort problem under den inledande implementeringsfasen, eftersom DBA är tänkt att konfigurera och säkra åtkomsten till databasen senare (genom att köra mysql_secure_installation till exempel). Det större problemet här är att en god praxis inte upprätthålls av MariaDB. Om du inte behöver ställa in ett starkt lösenord för root-användaren kan det vara så att ingen ändrar det senare och lösenordslös åtkomst kommer att finnas kvar. Då skulle detta bli ett allvarligt säkerhetshot.

En annan aspekt vi skulle vilja titta på är anonym, lösenordslös åtkomst. Anonyma användare tillåter vem som helst att komma in, det behöver inte vara en fördefinierad användare. Om sådan åtkomst är lösenordslös betyder det att vem som helst kan ansluta till MySQL. Vanligtvis har ett sådant konto endast ANVÄNDNINGsbehörighet, men även då är det möjligt att skriva ut en status ('\s') som innehåller information som MySQL-version, teckenuppsättning etc. Dessutom, om 'test'-schemat är tillgängligt, har en sådan användare möjlighet att skriv till det schemat.

Både MySQL Community Server och Percona server har inga anonyma användare definierade i 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)

Å andra sidan är MariaDB öppen för anonym, lösenordslös åtkomst.

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)

Utöver det är "test"-schemat tillgängligt - vilket gör att anonyma användare kan skriva skrivningar till databasen.

[[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)

Detta utgör ett allvarligt hot och måste redas ut. Annars kan den lätt utnyttjas för att försöka överbelasta servern med skrivningar.

Data i transitsäkerhet

MySQL Community Server och båda dess gafflar stödjer användningen av SSL för att kryptera data under överföring. Detta är extremt viktigt för Wide Area Networks, men bör inte heller förbises i ett lokalt nätverk. SSL kan användas både på klient- och serversidan. När det gäller serversidans konfiguration (för att kryptera trafik från master till slavar, till exempel), ser det identiskt ut över hela linjen. Det finns dock en skillnad när det gäller SSL-kryptering på klientsidan, introducerad i MySQL 5.7. Före 5.7 var man tvungen att generera SSL-nycklar och CA och definiera dem i konfigurationerna av både server och klient. Så här ser MariaDB:s 10.2 SSL-inställning ut. I både MySQL Community Server 5.7 och i Percona Server 5.7 (som är baserad på MySQL 5.7) finns det inget behov av att förgenerera nycklar. Allt görs automatiskt, i bakgrunden. Allt du behöver göra är att aktivera SSL på din klient genom att ställa in rätt "--ssl-läge". För MySQL:s CLI-klient behövs detta inte ens eftersom det aktiverar SSL som standard:

[[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
--------------

Å andra sidan skulle MariaDB kräva ytterligare konfiguration eftersom SSL är inaktiverat som standard:

[[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
--------------

Data i vila kryptering

Först av allt, säkerhetskopior - det finns fritt tillgängliga säkerhetskopieringsverktyg som xtrabackup eller MariaDB Backup (som är en gaffel av xtrabackup). Dessa gör det möjligt att skapa krypterade säkerhetskopior av alla tre MySQL-varianter som vi diskuterar i det här blogginlägget.

Alla tre varianterna stöder kryptering av den löpande databasen, men det finns skillnader i vilka databitar som är krypterade.

MySQL Community Server stöder endast kryptering av InnoDB-tabellutrymmen. Nycklar som används för kryptering lagras i filer (vilket inte följer reglerna - nycklar bör lagras i ett valv - något som MySQL Enterprise stöder). Percona Server är baserad på MySQL Community Server, så den stöder även kryptering av InnoDB-tabellutrymmen. Nyligen, i Percona Server 5.7.20, tillkom stöd för kryptering av allmänna tabellutrymmen (jämfört med endast enskilda i tidigare versioner och MySQL Community Edition). Stöd för kryptering av binära loggar lades också till. Percona Server levereras med en keyring_vault-plugin, som kan användas för att lagra nycklar i Hashicorp Vault-server, vilket gör Percona Server 5.7.20 kompatibel med regulatoriska krav gällande kryptering av data i vila.

MariaDB 10.2 har mer avancerad krypteringsstöd för data-at-rest. Förutom tabellutrymme och binär/reläloggkryptering har den stöd för kryptering av InnoDB-redologgar. För närvarande är det den mer kompletta lösningen när det gäller datakryptering.

Revisionsloggning

Alla tre MySQL-smakerna har stöd för revisionsloggning. Deras omfattning är i stort sett jämförbar:anslut och koppla ifrån händelser, exekverade frågor, åtkomst till tabeller. Loggarna innehåller information om vilken användare som deltog i en sådan händelse, från vilken värd användaren loggade från, när det hände och liknande information. Sådana händelser kan också loggas via syslog och lagras på en extern loggserver för att möjliggöra logganalys och analys.

Datamaskering, SQL-brandvägg

Alla de diskuterade MySQL-smakerna fungerar med någon form av verktyg som skulle tillåta implementering av datamaskering och skulle kunna blockera SQL-trafik baserat på vissa regler. Datamaskering är en metod för att fördunkla vissa data utanför databasen, men innan den når klienten. Ett exempel skulle vara kreditkortsdata som lagras i vanlig text i databasen, men när en utvecklare vill fråga efter sådan information kommer hon att se "xxxxxxxx..." istället för siffror. Verktygen vi pratar om här är ProxySQL och MaxScale. MaxScale är en produkt från MariaDB Corporation och är prenumerationsbaserad. ProxySQL är en gratis att använda databasproxy. Båda proxyservrarna kan användas med vilken som helst av MySQL-smakerna.

Det är allt för idag gott folk. För ytterligare läsning, kolla in dessa 10 tips för att säkra dina MySQL- och MariaDB-databaser.


  1. Välj Oracle för uppdateringsbeteende

  2. heroku, postgreSQL, django, comments, tastypie:Ingen operator matchar givna namn och argumenttyp(er). Du kan behöva lägga till explicita casts

  3. Konfigurera SQL Server Log Shipping

  4. Hur omdirigerar man utdata från DBMS_OUTPUT.PUT_LINE till en fil?