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'