sql >> Base de Datos >  >> RDS >> MariaDB

MySQL vs MariaDB vs Percona Server:Comparación de funciones de seguridad

La seguridad de los datos es fundamental para cualquier organización. Es un aspecto importante que puede influir en gran medida en el diseño del entorno de la base de datos. Al decidir qué tipo de MySQL usar, debe tener en cuenta las características de seguridad disponibles de los diferentes proveedores de servidores. En esta publicación de blog, presentaremos una breve comparación de las últimas versiones de MySQL Community Edition de Oracle, Percona Server y 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 a utilizar Centos 7 como sistema operativo; tenga en cuenta que los resultados que presentamos aquí pueden ser ligeramente diferentes en otras distribuciones como Debian o Ubuntu. También nos gustaría centrarnos en las diferencias y no cubriremos los puntos en común:Percona Server y MariaDB son versiones de MySQL, por lo que algunas de las características de seguridad (por ejemplo, cómo se ven los privilegios de acceso de los archivos MySQL) se comparten entre ellos.

Seguridad inicial

Usuarios

Tanto Percona Server como MySQL Community Server vienen con una contraseña temporal generada aleatoriamente para el usuario root. Debe verificar el contenido del registro de errores de MySQL para encontrarlo:

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

Una vez que inicia sesión, se le impone un cambio de contraseña:

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

La contraseña tiene que ser lo suficientemente segura, esto se aplica mediante el complemento de validación_contraseña:

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 no genera una contraseña raíz aleatoria y proporciona acceso sin contraseña a la cuenta raíz desde (y solo desde) 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)

Esto no es un gran problema durante la fase de implementación inicial, ya que se supone que el DBA configura y protege el acceso a la base de datos más adelante (ejecutando mysql_secure_installation, por ejemplo). El mayor problema aquí es que MariaDB no aplica una buena práctica. Si no tiene que configurar una contraseña segura para el usuario raíz, es posible que nadie la cambie más tarde y se mantenga el acceso sin contraseña. Entonces esto se convertiría en una seria amenaza para la seguridad.

Otro aspecto que nos gustaría analizar es el acceso anónimo y sin contraseña. Los usuarios anónimos permiten que cualquier persona ingrese, no tiene que ser un usuario predefinido. Si dicho acceso no requiere contraseña, significa que cualquiera puede conectarse a MySQL. Por lo general, dicha cuenta solo tiene privilegios de USO, pero incluso entonces es posible imprimir un estado ('\ s') que contiene información como la versión de MySQL, el conjunto de caracteres, etc. Además, si el esquema de 'prueba' está disponible, dicho usuario tiene la capacidad de escribir en ese esquema.

Tanto MySQL Community Server como el servidor Percona no tienen ningún usuario anónimo definido en 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 otro lado, MariaDB está abierto para acceso anónimo y sin contraseña.

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)

Además de eso, el esquema de "prueba" está disponible, lo que permite a los usuarios anónimos emitir escrituras en la base de datos.

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

Esto representa una amenaza grave y debe resolverse. De lo contrario, puede explotarse fácilmente para intentar sobrecargar el servidor con escrituras.

Seguridad de datos en tránsito

MySQL Community Server y sus dos bifurcaciones admiten el uso de SSL para cifrar datos en tránsito. Esto es extremadamente importante para las redes de área amplia, pero tampoco debe pasarse por alto en una red local. SSL se puede utilizar tanto en el lado del cliente como en el del servidor. Con respecto a la configuración del lado del servidor (para encriptar el tráfico de maestro a esclavo, por ejemplo), parece idéntico en todos los ámbitos. Sin embargo, hay una diferencia cuando se trata del cifrado SSL del lado del cliente, introducido en MySQL 5.7. Antes de 5.7, uno tenía que generar claves SSL y CA y definirlas en las configuraciones tanto del servidor como del cliente. Así es como se ve la configuración SSL 10.2 de MariaDB. Tanto en MySQL Community Server 5.7 como en Percona Server 5.7 (que se basa en MySQL 5.7), no es necesario generar claves previamente. Todo se hace automáticamente, en segundo plano. Todo lo que necesita hacer es habilitar SSL en su cliente configurando el '--ssl-mode' correcto. Para el cliente CLI de MySQL, esto ni siquiera es necesario ya que habilita SSL de forma predeterminada:

[[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 otro lado, MariaDB requeriría una configuración adicional ya que SSL está deshabilitado de manera predeterminada:

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

Cifrado de datos en reposo

En primer lugar, las copias de seguridad:existen herramientas de copia de seguridad disponibles gratuitamente como xtrabackup o MariaDB Backup (que es una bifurcación de xtrabackup). Estos permiten crear copias de seguridad cifradas de las tres variantes de MySQL que analizamos en esta publicación de blog.

Los tres tipos admiten el cifrado de la base de datos en ejecución, pero existen diferencias en los datos que se cifran.

MySQL Community Server solo admite el cifrado de espacios de tablas de InnoDB. Las claves utilizadas para el cifrado se almacenan en archivos (lo que no cumple con las regulaciones; las claves deben almacenarse en una bóveda, algo que admite MySQL Enterprise). Percona Server se basa en MySQL Community Server, por lo que también admite el cifrado de espacios de tablas de InnoDB. Recientemente, en Percona Server 5.7.20, se agregó soporte para el cifrado de espacios de tablas generales (en comparación con solo los individuales en versiones anteriores y MySQL Community Edition). También se agregó soporte para el cifrado de registros binarios. Percona Server viene con un complemento keyring_vault, que se puede usar para almacenar claves en el servidor Hashicorp Vault, lo que hace que Percona Server 5.7.20 cumpla con los requisitos reglamentarios relacionados con el cifrado de datos en reposo.

MariaDB 10.2 tiene un soporte de cifrado de datos en reposo más avanzado. Además del cifrado de espacios de tablas y registros binarios/de retransmisión, tiene soporte para cifrar registros de rehacer de InnoDB. Actualmente, es la solución más completa en cuanto a cifrado de datos.

Registro de auditoría

Los tres sabores de MySQL tienen soporte para el registro de auditoría. Su alcance es bastante comparable:eventos de conexión y desconexión, consultas ejecutadas, tablas a las que se accede. Los registros contienen información sobre qué usuario participó en dicho evento, desde qué host inició sesión, la hora en que sucedió e información similar. Dichos eventos también se pueden registrar a través de syslog y almacenar en un servidor de registro externo para permitir el análisis y análisis de registros.

Enmascaramiento de datos, SQL Firewall

Todos los sabores de MySQL discutidos funcionan con algún tipo de herramienta que permitiría implementar el enmascaramiento de datos y podría bloquear el tráfico de SQL según algunas reglas. El enmascaramiento de datos es un método para ocultar algunos datos fuera de la base de datos, pero antes de que lleguen al cliente. Un ejemplo serían los datos de la tarjeta de crédito que se almacenan en texto sin formato en la base de datos, pero cuando un desarrollador desea consultar dichos datos, verá 'xxxxxxxx...' en lugar de números. Las herramientas de las que estamos hablando aquí son ProxySQL y MaxScale. MaxScale es un producto de MariaDB Corporation y está basado en suscripción. ProxySQL es un proxy de base de datos de uso gratuito. Ambos proxies se pueden usar con cualquiera de los sabores de MySQL.

Eso es todo por hoy amigos. Para obtener más información, consulte estos 10 consejos para proteger sus bases de datos MySQL y MariaDB.