localhost
não corresponde a %
em MySQL. Parece que deveria, mas na verdade não é. Você teria que conceder privilégios separadamente para [email protected]
, ambos para o USAGE
privilégio e para os privilégios em cada banco de dados. Ou você pode se conectar como
[email protected]
o que faz corresponder %
. Usar o endereço IP para localhost parece funcionar de forma idêntica ao localhost, mas não funciona. Você precisa ter duas linhas no mysql.user
tabela (e também no mysql.db
table no seu caso) para habilitar ambos. Para demonstrar a diferença entre localhost e 127.0.0.1:
Conectando como
mysql -h localhost
usa a interface de soquete UNIX e ignora o TCP/IP. Isso pode ser um pouco melhor para o desempenho, mas afeta a correspondência de concessão descrita acima. Você pode forçar uma conexão TCP/IP local conectando como
mysql -h 127.0.0.1
. Em seguida, ele coletará as doações que você fez para [email protected]%
. Portanto, para obter o mesmo usuário, senha e privilégios para a interface de soquete e a interface TCP/IP, você precisa executar all das seguintes afirmações:
GRANT USAGE ON *.* TO 'myuser'@'%' IDENTIFIED BY PASSWORD '*7733323232...'
GRANT USAGE ON *.* TO 'myuser'@'localhost' IDENTIFIED BY PASSWORD '*7733323232...'
GRANT ALL PRIVILEGES ON `db1`.* TO 'myuser'@'%'
GRANT ALL PRIVILEGES ON `db1`.* TO 'myuser'@'localhost'
GRANT ALL PRIVILEGES ON `db2`.* TO 'myuser'@'%'
GRANT ALL PRIVILEGES ON `db2`.* TO 'myuser'@'localhost'