Alterando permissões de host para usuários do MySQL

34

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 ativar o acesso externo ao banco de dados, preciso alterar o localhost para % . Uma maneira de fazer isso é REVOKE all permissions e configurá-lo novamente. O problema é que há um conjunto de senhas que não conheço, por isso, se eu revogar a permissão, não posso configurá-lo de volta.

Existe uma maneira de alterar o nome do host localhost para % (e vice-versa) sem revogar a permissão em si?

    
por Fu86 28.02.2013 / 10:20

5 respostas

46

Se você tiver acesso ao banco de dados mysql , poderá alterar as tabelas de permissões diretamente:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

... e uma declaração UPDATE análoga para alterá-lo de volta.

Você também pode precisar fazer alterações na tabela mysql.db :

UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
    
por 28.02.2013 / 11:31
2

Eu tropecei neste, também, e a solução proposta não funcionou, já que os privilégios específicos do banco de dados não seriam movidos também. o que eu fiz:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;
    
por 19.04.2016 / 17:46
2

Melhor resposta em Stackoverflow sugerindo usar RENAME USER , que copia os privilégios de usuário.

    
por 04.10.2017 / 16:16
1

Para alterar privilégios, primeiro revogue toda a permissão para o usuário

 revoke all privileges on *.* from 'username'@'localhost';

 grant SELECT,INSERT,UPDATE,DELETE ON 'db'.* TO 'username'@'%';

 flush privileges;
    
por 28.02.2013 / 10:59
0

Ausente muitas das tabelas se você tiver privilégios além de simplesmente db (como tabelas ou colunas, etc.). Dependendo de quais concessões seu usuário possui, você pode precisar atualizar todas essas tabelas ou algumas:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.tables_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.columns_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.procs_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.proxies_priv SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;
    
por 13.10.2016 / 18:43