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

Protección de MySQL:uso de privilegios de acceso a datos para una instalación segura

La seguridad de la instalación de MySQL es algo que debe tener en cuenta todo administrador de bases de datos de MySQL. Si bien hemos discutido cómo debe cuidar su seguridad de MySQL en su conjunto (eche un vistazo a algunas de nuestras publicaciones anteriores, específicamente la serie de seguridad MySQL Parte uno y Parte dos), no hemos discutido problemas específicos relacionados con la seguridad, incluidas las cuestiones relacionadas con los privilegios. Hacemos eso aquí.

¿Qué son los privilegios en MySQL?

Se pueden otorgar privilegios en MySQL a las cuentas. Si otorga privilegios de cuenta en MySQL, determina qué operaciones puede realizar la cuenta. Se pueden otorgar privilegios a bases de datos u objetos de bases de datos (tablas, índices, vistas, etc.). Los privilegios también pueden ser dinámicos o estáticos. Los privilegios estáticos están integrados en el servidor, mientras que los privilegios dinámicos se pueden definir en tiempo de ejecución.

Cómo hacer uso de privilegios para la seguridad de MySQL

Para hacer uso de los privilegios en MySQL, esto es lo que debe recordar:

  • Para asignar o revocar privilegios, debe tener un usuario de MySQL. Los usuarios se pueden crear ejecutando una consulta CREATE USER:
     

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

  • Para asignar o revocar privilegios, use las instrucciones GRANT y REVOKE respectivamente:
     

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

  • Puede guardar privilegios ejecutando FLUSH PRIVILEGES. Véalos ejecutando SHOW GRANTS.

  • La declaración GRANT no se puede usar para otorgar privilegios y roles; la declaración debe otorgar privilegios o roles.

Para que su instalación de MySQL sea más segura, considere lo siguiente:

  • Otorgue a sus usuarios solo los privilegios necesarios para realizar sus tareas (por ejemplo, no use GRANT ALL si eso es no es necesario)

  • En general, evite ejecutar MySQL como un usuario root de Unix porque cualquier usuario con el privilegio FILE puede causar el servidor para crear archivos como root.

  • No otorgue el privilegio de ARCHIVO a usuarios que no sean administradores (consulte la explicación anterior)

  • Considere ejecutar mysqld como un usuario ordinario sin privilegios.

  • No otorgue privilegios PROCESS o SUPER a usuarios que no sean administradores. El privilegio PROCESS permite al usuario ver todos los procesos que se ejecutan en MySQL. El privilegio SUPER, entre otras cosas, permite cambios en la configuración del servidor, permite el uso de las declaraciones CREATE SERVER, ALTER SERVER y DROP SERVER, y también permite el uso de la declaración KILL, lo que permite que el usuario elimine las declaraciones que pertenecen a otras cuentas. Tenga en cuenta que MySQL reserva una conexión extra para los usuarios que tienen el privilegio SUPER. El privilegio SUPER también permite que un usuario controle los servidores de replicación.

Siga los consejos anteriores y estará bien encaminado hacia una instalación de MySQL más segura. Sin embargo, si está utilizando una versión más nueva de MySQL, hay una cosa más que debemos tener en cuenta:MySQL ha introducido funciones en MySQL 8.0.16.

Roles en MySQL Security

Si nunca ha oído hablar de los roles en MySQL, no se preocupe. Los roles son muy similares a los privilegios, por eso los hemos incluido en esta publicación de blog. De hecho, los roles son solo eso:son colecciones de privilegios, es decir, cuando se asigna un rol a un usuario, se le asignan todos los privilegios relacionados con ese rol. Los roles se pueden agregar y eliminar mediante las declaraciones CREATE ROLE y DROP ROLE. Para hacer uso de roles en MySQL, cree un nombre de rol, otorgue privilegios a ese rol y luego asígnelo a un usuario como este:

CREATE ROLE [IF NOT EXISTS] ‘role_1’;
GRANT SELECT ON db_name.* TO user_name;
GRANT role_1 TO [email protected];

¿Qué privilegios debe otorgar?

Al otorgar privilegios, siga el principio de privilegio mínimo:a una cuenta de MySQL solo se le deben otorgar los privilegios necesarios para sus propósitos. Los privilegios más utilizados son:

  • TODOS LOS PRIVILEGIOS que otorga todos los privilegios a una cuenta.

  • CREAR otorga los privilegios necesarios para crear bases de datos y tablas.

  • DROP otorga los privilegios necesarios para eliminar bases de datos y tablas.

  • DELETE otorga los privilegios necesarios para eliminar filas de las tablas.

  • INSERT otorga los privilegios necesarios para insertar filas en las tablas.

  • SELECT otorga los privilegios necesarios para ejecutar consultas SELECT.

  • ACTUALIZAR otorga los privilegios necesarios para actualizar filas en una tabla (para ejecutar consultas de ACTUALIZAR)

En general, es una buena idea evitar otorgar todos los privilegios a una cuenta; en su lugar, considere seguir el principio de privilegio mínimo. También tenga en cuenta que otorgar privilegios adicionales a un determinado usuario no elimina los privilegios que estaban en su lugar anteriormente. También puede ver los privilegios de un usuario específico usando esta sintaxis (reemplace el nombre de usuario con el nombre de usuario de su usuario):

SHOW GRANTS FOR ‘username’;

Resumen

Cuando se trata de privilegios en MySQL, tenga en cuenta que debe seguir el principio del privilegio mínimo (es decir, otorgar solo los privilegios que sean necesarios). Seguir los consejos descritos en este blog debería ayudar a que su instalación de MySQL sea más segura. Recuerde que sus privilegios deben guardarse para que surtan efecto (la declaración FLUSH PRIVILEGES puede ayudarlo a hacerlo), además, tenga en cuenta que desde MySQL 8.0.16 puede hacer uso de roles en MySQL para asignar conjuntos de privilegios a un usuario específico.

Esperamos que esta publicación de blog le haya ayudado a proteger su(s) instancia(s) de MySQL. Si tiene alguna pregunta o comentario, no dude en comentar, también considere echar un vistazo a nuestra serie de seguridad de MySQL (aquí y aquí)