Eu tenho as seguintes concessões para um usuário/banco de dados
mysql> SHOW GRANTS FOR 'username'@'localhost';
+---------------------------------------------------------------------------+
| Grants for username@localhost |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY PASSWORD 'xxx' |
| GRANT ALL PRIVILEGES ON `userdb`.* TO 'username'@'localhost' |
+---------------------------------------------------------------------------+
Para habilitar o acesso externo ao banco de dados, preciso alterar localhost para %
. Uma maneira de fazer isso é REVOKE
todas as permissões e configurá-lo novamente. O problema é que há uma senha definida que eu não conheço, portanto, se eu revogar a permissão, não posso recuperá-la.
Existe uma maneira de alterar o nome do host localhost
para %
(e vice-versa) sem revogar a própria permissão?
Se você tiver acesso ao
mysql
banco de dados, poderá alterar as tabelas de concessão diretamente:...e uma declaração análoga
UPDATE
para alterá-lo de volta.Além disso, você pode precisar fazer alterações na
mysql.db
tabela também:e, em seguida, libere para aplicar os privilégios:
Melhor resposta no Stackoverflow sugerindo usar
RENAME USER
qual cópia dos privilégios do usuário.O uso de Data Control Language (declarações como GRANT, REVOKE, RENAME e assim por diante) não requer
FLUSH PRIVILEGES;
e é necessário em arquiteturas como Galera ou Group Replication em versões MySQL com tabelas MyISAM nomysql
banco de dados porque as tabelas MyISAM não são replicadas.A melhor opção no MySQL 8 / MariaDB 10 seria:
Veja https://dev.mysql.com/doc/refman/8.0/en/rename-user.html
Também me deparei com este, e a solução proposta não funcionou, pois os privilégios específicos do banco de dados também não seriam movidos. o que eu fiz:
Para alterar os privilégios, primeiro revogue todas as permissões ao usuário
Faltam muitas tabelas se você tiver privilégios diferentes de simplesmente db (como tabelas ou colunas etc). Dependendo das concessões que seu usuário possui, pode ser necessário atualizar todas essas tabelas ou algumas: