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.
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:
- Creación y gestión de cuentas de usuario con diferentes restricciones de conexión
- 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.



