MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

MySQL vs MariaDB vs Servidor Percona:Comparação de Recursos de Segurança


A segurança dos dados é fundamental para qualquer organização. É um aspecto importante que pode influenciar fortemente o design do ambiente de banco de dados. Ao decidir sobre qual versão do MySQL usar, você precisa levar em consideração os recursos de segurança disponíveis nos diferentes fornecedores de servidores. Nesta postagem do blog, faremos uma breve comparação das versões mais recentes do MySQL Community Edition da Oracle, Percona Server e 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)

Vamos usar o Centos 7 como sistema operacional - lembre-se de que os resultados que apresentamos aqui podem ser ligeiramente diferentes em outras distribuições como Debian ou Ubuntu. Também gostaríamos de focar nas diferenças e não abordaremos as semelhanças - Percona Server e MariaDB são versões do MySQL, então alguns dos recursos de segurança (por exemplo, como os privilégios de acesso dos arquivos MySQL se parecem) são compartilhados entre eles.

Segurança inicial

Usuários


Tanto o Percona Server quanto o MySQL Community Server vêm com uma senha temporária gerada aleatoriamente para o usuário root. Você precisa verificar o conteúdo do log de erros do MySQL para encontrá-lo:
2018-01-19T13:47:45.532148Z 1 [Note] A temporary password is generated for [email protected]: palwJu7uSL,g

Depois de fazer login, uma alteração de senha é forçada a você:
[[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.

A senha deve ser forte o suficiente, isso é imposto pelo plugin 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)

O MariaDB não gera uma senha root aleatória e fornece acesso sem senha à conta root de (e somente de) 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)

Este não é um grande problema durante a fase de implantação inicial, pois o DBA deve configurar e proteger o acesso ao banco de dados posteriormente (executando mysql_secure_installation, por exemplo). O maior problema aqui é que uma boa prática não é aplicada pelo MariaDB. Se você não precisar configurar uma senha forte para o usuário root, pode ser que ninguém a altere posteriormente e o acesso sem senha permanecerá. Então isso se tornaria uma séria ameaça à segurança.

Outro aspecto que gostaríamos de analisar é o acesso anônimo e sem senha. Usuários anônimos permitem que qualquer pessoa entre, não precisa ser um usuário predefinido. Se esse acesso for sem senha, significa que qualquer pessoa pode se conectar ao MySQL. Normalmente, essa conta tem apenas o privilégio USAGE, mas mesmo assim é possível imprimir um status ('\s') que contém informações como versão do MySQL, conjunto de caracteres etc. Além disso, se o esquema 'teste' estiver disponível, esse usuário poderá escreva nesse esquema.

Tanto o MySQL Community Server quanto o servidor Percona não possuem usuários anônimos definidos no 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)

Por outro lado, o MariaDB está aberto para acesso anônimo e sem senha.
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)

Além disso, está disponível o esquema 'teste' - que permite que usuários anônimos emitam gravações no banco de dados.
[[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)

Isso representa uma séria ameaça e precisa ser resolvido. Caso contrário, ele pode ser facilmente explorado para tentar sobrecarregar o servidor com gravações.

Segurança de dados em trânsito


O MySQL Community Server e seus dois forks suportam o uso de SSL para criptografar dados em trânsito. Isso é extremamente importante para redes de longa distância, mas também não deve ser negligenciado em uma rede local. SSL pode ser usado tanto do lado do cliente quanto do lado do servidor. Em relação à configuração do lado do servidor (para criptografar o tráfego do mestre para os escravos, por exemplo), parece idêntico em todos os aspectos. Há uma diferença quando se trata de criptografia SSL do lado do cliente, introduzida no MySQL 5.7. Antes do 5.7, era necessário gerar chaves SSL e CAs e defini-los nas configurações do servidor e do cliente. É assim que a configuração SSL 10.2 do MariaDB se parece. Tanto no MySQL Community Server 5.7 quanto no Percona Server 5.7 (que é baseado no MySQL 5.7), não há necessidade de pré-gerar chaves. Tudo é feito automaticamente, em segundo plano. Tudo o que você precisa fazer é habilitar o SSL em seu cliente definindo o ‘--ssl-mode’ correto. Para o cliente CLI do MySQL, isso nem é necessário, pois habilita o SSL por padrão:
[[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
--------------

Por outro lado, o MariaDB exigiria configuração adicional, pois o SSL está desabilitado por padrão:
[[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
--------------

Criptografia de dados em repouso


Em primeiro lugar, backups - existem ferramentas de backup disponíveis gratuitamente como xtrabackup ou MariaDB Backup (que é um fork do xtrabackup). Eles permitem criar backups criptografados de todos os três tipos de MySQL que discutimos nesta postagem do blog.

Todos os três tipos oferecem suporte à criptografia do banco de dados em execução, mas há diferenças em quais partes de dados são criptografadas.

O MySQL Community Server suporta apenas a criptografia de tablespaces InnoDB. As chaves usadas para criptografia são armazenadas em arquivos (o que não está em conformidade com os regulamentos - as chaves devem ser armazenadas em um cofre - algo que o MySQL Enterprise suporta). O Percona Server é baseado no MySQL Community Server, portanto também suporta criptografia de tablespaces InnoDB. Recentemente, no Percona Server 5.7.20, foi adicionado suporte para criptografia de tablespaces gerais (em comparação com apenas os individuais nas versões anteriores e MySQL Community Edition). Suporte para criptografia de logs binários também foi adicionado. O Percona Server vem com um plug-in keyring_vault, que pode ser usado para armazenar chaves no servidor Hashicorp Vault, tornando o Percona Server 5.7.20 compatível com os requisitos regulamentares relativos à criptografia de dados em repouso.

O MariaDB 10.2 tem suporte de criptografia de dados em repouso mais avançado. Além da criptografia de tablespace e log binário/relay, ele tem suporte para criptografar logs de redo InnoDB. Atualmente, é a solução mais completa em criptografia de dados.

Registro de auditoria


Todos os três tipos de MySQL têm suporte para log de auditoria. Seu escopo é bastante comparável:eventos de conexão e desconexão, consultas executadas, tabelas acessadas. Os logs contêm informações sobre qual usuário participou de tal evento, de qual host o usuário se conectou, a hora em que aconteceu e informações semelhantes. Esses eventos também podem ser registrados via syslog e armazenados em um servidor de log externo para permitir a análise e análise de log.

Mascaramento de dados, firewall SQL


Todos os sabores do MySQL discutidos funcionam com algum tipo de ferramenta que permitiria implementar o mascaramento de dados e seria capaz de bloquear o tráfego SQL com base em algumas regras. O mascaramento de dados é um método de ofuscar alguns dados fora do banco de dados, mas antes que eles cheguem ao cliente. Um exemplo seria dados de cartão de crédito que são armazenados em texto simples no banco de dados, mas quando um desenvolvedor deseja consultar esses dados, ele verá 'xxxxxxxx...' em vez de números. As ferramentas que estamos falando aqui são ProxySQL e MaxScale. MaxScale é um produto da MariaDB Corporation e é baseado em assinatura. ProxySQL é um proxy de banco de dados gratuito para uso. Ambos os proxies podem ser usados ​​com qualquer um dos sabores do MySQL.

Por hoje é só pessoal. Para ler mais, confira estas 10 dicas para proteger seus bancos de dados MySQL e MariaDB.