DBAtlas · Atlas de operaciones de bases de datos

Construir un modelo de mínimo privilegio con roles (CREATE ROLE, DEFAULT ROLE)

MySQLSeguridad

Comando

CREATE ROLE IF NOT EXISTS 'app_read', 'app_write';
GRANT SELECT ON shop.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON shop.* TO 'app_write';

-- Application account: network range, TLS required, roles active by default
CREATE USER 'svc_app'@'10.0.%' IDENTIFIED BY 'S3cure#App2024' DEFAULT ROLE 'app_read', 'app_write' REQUIRE SSL;
CREATE USER 'ana'@'%' IDENTIFIED BY 'An4#Report2024';
GRANT 'app_read' TO 'ana'@'%';
SET DEFAULT ROLE ALL TO 'ana'@'%';

-- Show grants with roles expanded
SHOW GRANTS FOR 'svc_app'@'10.0.%' USING 'app_read', 'app_write';
SELECT FROM_USER, FROM_HOST, TO_USER, TO_HOST FROM mysql.role_edges;

Qué hace

Otorga privilegios a roles en lugar de a usuarios individuales; las cuentas obtienen los privilegios mediante la pertenencia a roles. Los cambios se hacen en un solo lugar y la auditoría y las bajas se simplifican.

Cuándo usarlo

Al crear nuevas cuentas de aplicación / equipo y al sanear servidores heredados con privilegios enmarañados.

Precaución

Un rol que no es rol por defecto no está activo en la sesión (CURRENT_ROLE() NONE) y parece que el usuario carece de privilegios; use SET DEFAULT ROLE ALL o activate_all_roles_on_login=ON. Un rol también es una cuenta (bloqueada, sin contraseña) y aparece en mysql.user. Use un rango de red en lugar de '%' para las cuentas de aplicación. Nunca otorgue ALL, SUPER, FILE, PROCESS ni CONNECTION_ADMIN a una cuenta de aplicación. Revocar un privilegio de un rol también afecta a las sesiones activas.

Abrir en DBAtlas →

Relacionado