sql >> Base de Datos >  >> RDS >> Mysql

Cómo proteger MySQL:primera parte

Siempre que se menciona la seguridad de las aplicaciones, la gente piensa en proteger las aplicaciones contra algunos de los ataques más frecuentes, como inyección, autenticación rota, exposición de datos confidenciales y similares. Sin embargo, aunque estos ataques prevalecen, saber cómo proteger su aplicación de ellos por sí solo no será suficiente, especialmente cuando ejecuta MySQL. Hoy vamos a ver un lado diferente de la seguridad:vamos a ver cómo asegurar MySQL correctamente.

Como la seguridad de MySQL es algo muy importante, trate esta publicación como el comienzo de una serie de publicaciones sobre las medidas de seguridad de MySQL. No cubriremos todo, pero esta publicación debería proporcionar la base de algunas de las medidas de seguridad de MySQL.

¿Por qué necesita proteger MySQL?

En primer lugar, debemos responder a la pregunta de por qué querríamos asegurar MySQL. Después de todo, si protegemos nuestra aplicación contra las amenazas más frecuentes, deberíamos estar seguros, ¿no? Bueno, sí y no.

Verá, cuando protege su aplicación contra ciertos ataques, se asegura de que a los atacantes les resulte más difícil penetrar las defensas de su aplicación; sin embargo, para proteger su base de datos, la protección contra tales ataques será no ser suficiente. Asegurar su base de datos podría ser la última gota que podría salvar su aplicación (¡y su base de datos!) de la destrucción.

¿Cómo protejo MySQL?

Ahora, a la pregunta candente. ¿Cómo se asegura realmente MySQL?

Al pensar en la seguridad de su(s) instancia(s) de MySQL, debe considerar una amplia gama de opciones posibles. Afortunadamente, algunas de esas opciones ni siquiera se limitan a MySQL, lo que significa que también serán aplicables en otros escenarios. Comenzaremos con las cosas generales.

Seguridad MySQL - General

Al proteger MySQL, tenga en cuenta que utiliza listas de control de acceso (ACL) basadas en la seguridad para las operaciones realizadas por los usuarios (las listas de control de acceso son una lista de permisos asociados con un objeto). A continuación, le indicamos cómo solucionar algunos de los problemas de seguridad más básicos:

  • Asegure la cuenta MySQL inicial:esto es muy obvio, pero debe asegurarse de que la cuenta raíz tenga una contraseña. La cuenta raíz puede o no tener una contraseña cuando MySQL se instala por primera vez; puede averiguar cuál es la contraseña consultando el registro de errores y luego cámbiela por una más segura si lo desea. Todas las demás cuentas también deben tener contraseñas.
  • Nunca almacene contraseñas dentro de ninguna base de datos MySQL en texto sin formato:use una función de hashing unidireccional como BCrypt.
  • No otorgue acceso a ningún usuario a la tabla de usuarios en la base de datos mysql (el usuario raíz es una excepción).

Además, familiarícese con el control de acceso y la administración de cuentas en MySQL. Este tema merece un libro completo en sí mismo, pero las cosas básicas que debe saber incluyen:

  • Control de acceso en MySQL;
  • Creación, modificación y eliminación de usuarios;
  • Otorgar y revocar privilegios a y de los usuarios;
  • Saber cómo verificar qué privilegios se asignan;
  • Qué categorías de cuenta son;
  • Qué son las cuentas reservadas;
  • Qué roles son;
  • Cómo funciona la administración de contraseñas;
  • Cómo funciona el bloqueo de cuentas;
  • Echando un vistazo a los complementos de seguridad que ofrece MySQL;
  • Saber cómo proteger las copias de seguridad de MySQL.

En lo que respecta a la seguridad de MySQL, también se deben cubrir las copias de seguridad.

Ahora, analizaremos más a fondo cada una de estas opciones.

Control de acceso en MySQL

  • Como ya se indicó anteriormente, nunca le dé a ninguna cuenta, excepto la cuenta raíz, acceso a la tabla de usuarios en la base de datos mysql;
  • Asegúrese de que todas las cuentas MySQL existentes usen solo los privilegios que absolutamente necesitan para realizar sus acciones.

Creación, modificación y eliminación de usuarios en MySQL

En MySQL, los usuarios se pueden crear ejecutando la consulta CREATE USER:

CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;

​Los usuarios pueden modificarse ejecutando la consulta ALTER USER:la consulta le permite hacer muchas cosas diferentes, incluido bloquear y desbloquear cuentas, requerir que la cuenta se conecte mediante SSL, establecer la cantidad máxima de conexiones por hora, descartar contraseñas antiguas, etc. Aquí hay una consulta de muestra que puede cambiar su propia contraseña:

ALTER USER USER() IDENTIFIED BY ‘password’;

Los usuarios se pueden eliminar ejecutando la consulta DROP USER:

DROP USER ‘demouser’@’localhost’;

Concesión y revocación de privilegios a y de usuarios en MySQL

La instrucción GRANT debe otorgar privilegios o roles. La declaración ON puede decirle si se otorgarán privilegios o roles. La siguiente consulta otorga privilegios:

GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’;

​La siguiente consulta otorga roles:

GRANT ‘demo_role’ TO ‘demouser’@’localhost’;

GRANT debería responder con Query OK, 0 filas afectadas.

Para revocar ciertos privilegios de los usuarios, use la instrucción REVOKE (la parte del nombre de host del nombre de cuenta tiene el valor predeterminado "%"):

REVOKE SELECT ON *.* FROM ‘demouser’@’localhost’;

Para revocar todos los privilegios, se puede usar REVOKE ALL:

REVOKE ALL PRIVILEGES ON *.* FROM ‘demouser’@’localhost’;

Es posible que desee emitir un FLUSH PRIVILEGES; después de realizar los pasos anteriores.

Comprobando qué privilegios están asignados en MySQL

  • Para verificar qué privilegios están asignados, emita SHOW GRANTS; declaración.
  • Para cada solicitud que se emite, el servidor determina la operación que desea realizar y luego verifica si sus privilegios son suficientes para realizar la operación en cuestión.
  • El servidor usa las tablas de usuario y db en la base de datos mysql para garantizar el control de acceso.
  • Las tablas user y global_grants otorgan privilegios globales.

El resto de las opciones se cubrirán en próximas publicaciones.

Resumen

En lo que respecta a la seguridad de MySQL, tiene una amplia gama de opciones para elegir. Las opciones incluyen medidas de seguridad básicas que pueden aplicarse a casi todas las aplicaciones, pero algunas de las opciones son bastante específicas de MySQL. Tenga en cuenta que aún no se han cubierto todas las opciones disponibles; también se hablará de ellas en las próximas ediciones de la serie de seguridad de MySQL.