DBAtlas · Atlas de operações de banco de dados

Montar um modelo de menor privilégio com roles (CREATE ROLE, DEFAULT ROLE)

MySQLSegurança

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;

O que faz

Concede privilégios a roles em vez de usuários individuais; as contas obtêm privilégios por pertencerem a roles. As mudanças acontecem em um só lugar, e auditoria e desligamento de pessoas ficam mais fáceis.

Quando usar

Ao criar novas contas de aplicação / equipe e ao limpar servidores legados com privilégios emaranhados.

Atenção

Uma role que não é default role não fica ativa na sessão (CURRENT_ROLE() NONE) e o usuário parece não ter privilégios; use SET DEFAULT ROLE ALL ou activate_all_roles_on_login=ON. Uma role também é uma conta (bloqueada, sem senha) e aparece em mysql.user. Use uma faixa de rede em vez de '%' para contas de aplicação. Nunca conceda ALL, SUPER, FILE, PROCESS ou CONNECTION_ADMIN a uma conta de aplicação. Revogar um privilégio de uma role afeta também as sessões ativas.

Abrir no DBAtlas →

Relacionados