Mysql
 sql >> Database >  >> RDS >> Mysql

L'utente non può accedere a un database

localhost non corrisponde a % in MySQL. Sembra che dovrebbe, ma in realtà non è così. Dovresti concedere separatamente i privilegi a [email protected] , sia per il USAGE privilegio e per i privilegi su ciascun database.

Oppure puoi connetterti come [email protected] che fa corrisponde a % . L'utilizzo dell'indirizzo IP per localhost sembra che dovrebbe funzionare in modo identico a localhost, ma non è così. Devi avere due righe in mysql.user tabella (e anche nella mysql.db tabella nel tuo caso) per abilitarli entrambi.

Per dimostrare la differenza tra localhost e 127.0.0.1:

Connessione come mysql -h localhost utilizza l'interfaccia socket UNIX e ignora TCP/IP. Questo può essere leggermente migliore per le prestazioni, ma ha l'effetto sull'abbinamento delle sovvenzioni descritto sopra.

Puoi forzare una connessione TCP/IP locale connettendoti come mysql -h 127.0.0.1 . Quindi raccoglierà le sovvenzioni che hai concesso a [email protected]% .

Quindi, per ottenere lo stesso utente, password e privilegi sia per l'interfaccia socket che per l'interfaccia TCP/IP, dovresti eseguire all delle seguenti affermazioni:

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'