O MySQL não tem o conceito de "permissões padronizadas". Existem alguns tipos de permissão de sondagem úteis fornecidos, mas estes não são suficientemente granulados para construir algo equivalente.
Existem três etapas que seu usuário criador de banco de dados teria que fazer:
- Criando o novo banco de dados - permitido concedendo CREATE ao usuário de criação de banco de dados.
- Criando o novo usuário - permitido concedendo o comando CREATE USER ao usuário de criação do banco de dados. Infelizmente, a permissão CREATE USER também permite o uso de DROP USER, RENAME USER e REVOKE ALL PRIVILEGES. Fatalmente, isso permite que você execute DROP USER 'root' @ 'localhost'; e similar.
- Concedendo permissões de leitura / gravação . As permissões fluem do usuário de criação de banco de dados para o novo usuário, portanto, o usuário de criação de banco de dados deve ter permissões existentes no banco de dados recém-criado. Isso é possível concedendo ALL PRIVILEGES em todos os bancos de dados que começam com um prefixo (por exemplo, dev1_) e exigem que novos bancos de dados iniciem com esse prefixo. A permissão WITH GRANT OPTION permite que um usuário conceda suas permissões ao usuário recém-criado.
Como você pode ver, tudo quase funciona, além da parte de criação do usuário. Um possível comprometimento é criar usuários por desenvolvedor, que podem criar e usar vários bancos de dados de teste:
grant all privileges on 'dev1_%'.* to 'dev1'@'%' identified by 'password';
grant create on 'dev1_%'.* to 'dev1'@'%' identified by 'password';
Isso criará um usuário "dev1" que só pode criar e usar bancos de dados começando com "dev1 _".
Como o MySQL não pode fornecer uma solução sozinho, eu recomendo apenas escrever um programa para executar as etapas de criação de banco de dados e nome de usuário. Os desenvolvedores podem invocar o problema como:
create_dev_database --comment "xyz app test database" database_name username
Como o seu programa está controlando a criação de banco de dados / usuário, você pode:
- Aplicar senhas strongs (sem senhas de 'senha', como acima:))
- Impor restrições de acesso por nome de host (restringir conexões a '% .example.com' em vez de permitir que desenvolvedores escolham '%')
- Registre os detalhes de acesso e a finalidade de novos bancos de dados (não deseja centenas de bancos de dados ativos / inativos e nenhuma documentação de sua finalidade)
Tal programa teria que usar e proteger sua senha de root do MySQL. Como isso seria alcançado depende da plataforma.
Boa sorte!