Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O usuário não pode acessar um banco de dados


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'