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' |
+---------------------------------------------------------------------------------------------------------------+