Gestión de usuarios y privilegios en MySQL

MySQLBeginner
Practicar Ahora

Introducción

En este laboratorio, exploraremos la gestión de usuarios y los privilegios en MariaDB, habilidades esenciales para proteger su sistema de base de datos. Aprenderá cómo crear y gestionar cuentas de usuario, asignar los privilegios adecuados y ver los permisos. A través de ejercicios prácticos, adquirirá experiencia práctica con estas operaciones cruciales de seguridad de la base de datos y entenderá cómo implementar medidas básicas de seguridad en MariaDB. Este conocimiento es fundamental para cualquier administrador de base de datos para garantizar un control de acceso adecuado y la protección de los datos.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 98%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Creación y gestión de cuentas de usuario

Primero, conéctese a MySQL como root:

sudo mysql -u root

Creación de usuarios

Creemos usuarios con diferentes patrones de acceso:

-- Create a user that can connect only from localhost
CREATE USER 'hr_user'@'localhost' IDENTIFIED BY 'hr123';

-- Create a user that can connect from any host
CREATE USER 'reports_user'@'%' IDENTIFIED BY 'reports123';

-- Create a user without a password (not recommended for production)
CREATE USER 'intern'@'localhost';

El @'localhost' restringe las conexiones solo a la máquina local, mientras que @'%' permite conexiones desde cualquier host. No se recomienda crear usuarios sin contraseña en entornos de producción.

Para ver los usuarios que hemos creado:

SELECT User, Host FROM mysql.user;

La salida esperada muestra todos los usuarios del sistema:

+--------------+-----------+
| User         | Host      |
+--------------+-----------+
| reports_user | %         |
| hr_user      | localhost |
| intern       | localhost |
| mariadb.sys  | localhost |
| mysql        | localhost |
| root         | localhost |
+--------------+-----------+

Gestión de usuarios existentes

Para modificar usuarios existentes:

-- Change a user's password
SET PASSWORD FOR 'intern'@'localhost' = PASSWORD('intern123');

-- Require user to change password at next login
ALTER USER 'hr_user'@'localhost' PASSWORD EXPIRE;

La opción PASSWORD EXPIRE obliga a los usuarios a cambiar su contraseña en el próximo inicio de sesión, lo cual es útil para contraseñas temporales.

Para eliminar un usuario:

-- Remove a user
DROP USER 'reports_user'@'%';

Después de eliminar el usuario, verifique que la lista de usuarios se haya actualizado:

+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| hr_user     | localhost |
| intern      | localhost |
| mariadb.sys | localhost |
| mysql       | localhost |
| root        | localhost |
+-------------+-----------+

Asignación de privilegios

Ahora aprenderemos a asignar diferentes tipos de privilegios para controlar lo que los usuarios pueden hacer.

Gestión básica de privilegios

Asignemos algunos privilegios básicos a nuestro usuario de recursos humanos (HR):

-- Grant SELECT and INSERT privileges on company_db.employees table
GRANT SELECT, INSERT ON company_db.employees TO 'hr_user'@'localhost';

-- Verify the privileges
SHOW GRANTS FOR 'hr_user'@'localhost';

El comando GRANT otorga permisos específicos (SELECT, INSERT) en objetos específicos de la base de datos a los usuarios. El comando SHOW GRANTS muestra los privilegios actuales.

Salida esperada:

+----------------------------------------------------------------------------------------------------------------+
| Grants for hr_user@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `hr_user`@`localhost` IDENTIFIED BY PASSWORD '*27DB7FC6D35D1F5E6A4C37473D9018DD46DC2944' |
| GRANT SELECT, INSERT ON `company_db`.`employees` TO `hr_user`@`localhost`                                      |
+----------------------------------------------------------------------------------------------------------------+

Diferentes niveles de privilegios

MariaDB admite privilegios con diferentes niveles de granularidad:

-- Global privileges (all databases)
GRANT CREATE USER ON *.* TO 'intern'@'localhost';

-- Database level privileges
GRANT ALL PRIVILEGES ON company_db.* TO 'hr_user'@'localhost';

-- Table level privileges
GRANT SELECT, UPDATE ON company_db.employees TO 'intern'@'localhost';

-- Column level privileges
GRANT SELECT (name, department), UPDATE (department)
ON company_db.employees TO 'intern'@'localhost';

La sintaxis *.* se refiere a todas las bases de datos y tablas, mientras que database.* se refiere a todas las tablas de una base de datos específica. Los privilegios a nivel de columna permiten un control de acceso más detallado.

Revocación de privilegios

Para eliminar privilegios:

-- Revoke specific privileges
REVOKE INSERT ON company_db.employees FROM 'hr_user'@'localhost';

-- Revoke ALL privileges
REVOKE ALL PRIVILEGES ON company_db.employees FROM 'intern'@'localhost';

Siempre verifique los cambios de privilegios después de revocarlos utilizando SHOW GRANTS.

MariaDB [(none)]> SHOW GRANTS FOR 'hr_user'@'localhost';
+----------------------------------------------------------------------------------------------------------------+
| Grants for hr_user@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `hr_user`@`localhost` IDENTIFIED BY PASSWORD '*27DB7FC6D35D1F5E6A4C37473D9018DD46DC2944' |
| GRANT ALL PRIVILEGES ON `company_db`.* TO `hr_user`@`localhost`                                                |
| GRANT SELECT ON `company_db`.`employees` TO `hr_user`@`localhost`                                              |
+----------------------------------------------------------------------------------------------------------------+
MariaDB [(none)]> SHOW GRANTS FOR 'intern'@'localhost';
+---------------------------------------------------------------------------------------------------------------+
| Grants for intern@localhost                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `intern`@`localhost` IDENTIFIED BY PASSWORD '*A381F474A9DDCAA5BC97DAB83A69431B1C8D8902' |
+---------------------------------------------------------------------------------------------------------------+

Resumen

En este laboratorio, hemos cubierto los aspectos esenciales de la gestión de usuarios y privilegios en MariaDB:

  1. Creación y gestión de cuentas de usuario con diferentes restricciones de conexión
  2. Asignación y revocación de privilegios en varios niveles (global, base de datos, tabla, columna)

Estas habilidades son fundamentales para proteger su instalación de MariaDB e implementar un control de acceso adecuado. Comprender la gestión de usuarios y los privilegios es crucial para mantener la seguridad de la base de datos y garantizar que los usuarios tengan acceso adecuado a los recursos de la base de datos.