Is my permission wrong?
Sim, você está concedendo a conta mais do que precisa para que sua declaração GRANT
esteja errada.
How to forbid non-admin user to modify mysql.* tables?
Quando você concede GRANT permissões à conta SQL local que você cria, apenas conceda-o permissões que ele precisa para acessar os registros de banco de dados ou objetos de banco de dados que ele precisa acessar e nada mais.
O método mais seguro seria conceder apenas as permissões explícitas necessárias aos objetos explícitos do banco de dados, como SELECT
, para uma tabela específica, ou EXECUTE
, a um procedimento armazenado específico, por exemplo.
Veja os Privilégios Fornecidos pelo MySQL para entender melhor o que cada privilégio permite que uma conta acesse.
Depois de entender como cada privilégio funciona de acordo com os objetos do banco de dados, etc., você pode definir a segurança da conta SQL que você criará.
Quando você diz que não quer permitir a modificação de tabelas mysql, lembre-se que você pode modificar dados dentro de uma tabela onde DELETE
e UPDATE
permitiriam isso. Por outro lado, a permissão DROP
permitiria a exclusão de uma tabela inteira ou a permissão ALTER
permitiria a modificação do esquema da tabela, das definições da coluna ou de outros objetos existentes em uma tabela.
Exemplo
Você pode usar o seguinte para conceder uma conta SELECT
de acesso a todas as tabelas e EXECUTE
de acesso a todos os Procedimentos armazenados em um banco de dados específico:
GRANT CREATE, SELECT, EXECUTE ON 'DatabaseName'
TO 'user'@'localhost'
Every student can create their own database. So, theoretically, deny privileges to mysql database is the only way, right? How can I do
that?
Não, eu testei e confirmei que a solução abaixo funciona. Você basicamente permite que as contas student
MYSQL GRANT ALL PRIVILEGES
, mas apenas para bancos de dados que correspondam a um padrão de nomenclatura específico.
Isso significa que quando você faz os alunos concluírem os exercícios, você precisa garantir que instrua os DBs que eles criaram a ter um nome que corresponda a esse padrão. Isso também significa que o padrão de convenção de nomenclatura escolhido NÃO deve corresponder a um padrão como outros bancos de dados que você não deseja que eles acessem.
Mais uma vez, testei e confirmei que esta solução funciona e é uma solução bastante simples do que ficar explícita com DENY
permissões, o que pode ser perigoso, pois você pode facilmente ignorar ou não testar todos os cenários possíveis e essa é a razão pela qual vocêDENY
all e only GRANT
o que você deseja permitir em termos de segurança.
Exemplo
GRANT ALL PRIVILEGES ON 'student\_%' . * TO 'student'@'%';
Fonte de crédito
Agora, um usuário chamado student pode criar qualquer banco de dados na instância do MYSQL, desde que o nome seja ou comece com student_
. A barra invertida é o caractere de escape para o caractere underbar.