Como altero os privilégios para o usuário MySQL que já está criado?

69

Entendo como criar um novo usuário com privilégios, mas qual é a maneira correta de alterar privilégios para usuários que já foram criados?

Estamos executando uma auditoria de banco de dados e alguns dos usuários têm muito mais acesso do que o necessário. Além disso, não conheço as senhas da maioria desses usuários do MySQL, por isso não quero excluí-las e criar novas.

Embreagem
fonte

Respostas:

107

Para listar usuários:

select user,host from mysql.user;

Para mostrar privilégios:

show grants for 'user'@'host';

Para alterar privilégios, primeiro revogue. Tal como:

revoke all privileges on *.* from 'user'@'host';

Em seguida, conceda os privilégios apropriados conforme desejado:

grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'user'@'host';

Por fim, libere:

flush privileges;

A documentação do MySQL é excelente:

https://dev.mysql.com/doc/refman/8.0/en/access-control.html

Atalaia, vigia, avisador
fonte
3
Bem, sem revogar, serão publicados os privilégios;
Sergey
7
documentação mysql está perto ilegível, esta resposta é muito melhor
Timo Huovinen
Eu acho que (revogar todos os privilégios em . From 'user' @ 'host';) deve ser (revogar todos os . Em 'user' @ 'host';) Obrigado,
Nicholas
11
esta resposta está claramente incorreta "privilégios de liberação" não se aplica aos privilégios definidos com concessão. o processo acima faz com que o usuário não tenha privilégios entre o momento em que as consultas de revogação e concessão são executadas, além de liberar o cache de concessões sem motivo __ isso funcionaria se você executasse consultas regulares na tabela mysql.user em vez de usando concessões e se o servidor não travar ou parar entre as consultas.
Skullnobrains