Gestión de usuarios y privilegios en MySQL

MySQLMySQLBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mysql(("MySQL")) -.-> mysql/DatabaseFunctionsandDataTypesGroup(["Database Functions and Data Types"]) mysql(("MySQL")) -.-> mysql/TransactionManagementandSecurityGroup(["Transaction Management and Security"]) sql(("SQL")) -.-> sql/DatabaseManagementandOptimizationGroup(["Database Management and Optimization"]) mysql/DatabaseFunctionsandDataTypesGroup -.-> mysql/user("User Info Function") mysql/TransactionManagementandSecurityGroup -.-> mysql/identified_by("User Authentication") mysql/TransactionManagementandSecurityGroup -.-> mysql/grant_permission("Permission Granting") mysql/TransactionManagementandSecurityGroup -.-> mysql/revoke_permission("Permission Revocation") sql/DatabaseManagementandOptimizationGroup -.-> sql/security_permissions("Security and Permissions") subgraph Lab Skills mysql/user -.-> lab-418308{{"Gestión de usuarios y privilegios en MySQL"}} mysql/identified_by -.-> lab-418308{{"Gestión de usuarios y privilegios en MySQL"}} mysql/grant_permission -.-> lab-418308{{"Gestión de usuarios y privilegios en MySQL"}} mysql/revoke_permission -.-> lab-418308{{"Gestión de usuarios y privilegios en MySQL"}} sql/security_permissions -.-> lab-418308{{"Gestión de usuarios y privilegios en MySQL"}} end

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 'admin'@'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.