Mysql
 sql >> Base de données >  >> RDS >> Mysql

L'utilisateur ne peut pas accéder à une base de données

localhost ne correspond pas à % dans MySQL. Il semble que ce soit le cas, mais en fait ce n'est pas le cas. Vous devrez accorder séparément des privilèges à [email protected] , à la fois pour le USAGE privilège, et pour les privilèges sur chaque base de données.

Ou vous pouvez vous connecter en tant que [email protected] qui fait correspond à % . L'utilisation de l'adresse IP pour localhost semble fonctionner de la même manière que localhost, mais ce n'est pas le cas. Vous devez avoir deux lignes dans le mysql.user table (et aussi dans le mysql.db table dans votre cas) pour activer les deux.

Pour démontrer la différence entre localhost et 127.0.0.1 :

Connexion en tant que mysql -h localhost utilise l'interface socket UNIX et contourne TCP/IP. Cela peut être légèrement meilleur pour les performances, mais cela a l'effet sur la contrepartie des subventions décrite ci-dessus.

Vous pouvez forcer une connexion TCP/IP locale en vous connectant en tant que mysql -h 127.0.0.1 . Ensuite, il récupérera les subventions que vous avez accordées à [email protected]% .

Donc, pour obtenir le même utilisateur, mot de passe et privilèges pour l'interface socket et l'interface TCP/IP, vous devez exécuter all des déclarations suivantes :

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'