sql >> Base de Datos >  >> RDS >> Mysql

El usuario no puede acceder a una base de datos.

localhost no coincide con % en MySQL. Parece que debería, pero en realidad no es así. Tendría que otorgar privilegios por separado a [email protected] , tanto para el USAGE privilegio, y para los privilegios en cada base de datos.

O puede conectarse como [email protected] que hace coincide con % . Parece que usar la dirección IP para localhost debería funcionar de manera idéntica a localhost, pero no es así. Debe tener dos líneas en mysql.user (y también en la tabla mysql.db table en su caso) para habilitar ambos.

Para demostrar la diferencia entre localhost y 127.0.0.1:

Conectando como mysql -h localhost utiliza la interfaz de socket de UNIX y omite TCP/IP. Esto puede ser un poco mejor para el rendimiento, pero tiene el efecto sobre la correspondencia de subvenciones descrito anteriormente.

Puede forzar una conexión TCP/IP local conectándose como mysql -h 127.0.0.1 . Luego recogerá las concesiones que haya hecho a [email protected]% .

Entonces, para obtener el mismo usuario, contraseña y privilegios tanto para la interfaz de socket como para la interfaz TCP/IP, debe ejecutar all de las siguientes declaraciones:

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'