localhost
matcher ikke %
i MySQL. Det ser ud til, at det burde, men det gør det faktisk ikke. Du skal særskilt give privilegier til [email protected]
, begge for USAGE
privilegier og for privilegier på hver database.
Eller du kan oprette forbindelse som [email protected]
hvilket gør match %
. Brug af IP-adressen til localhost ser ud til at det burde fungere identisk med localhost, men det gør det ikke. Du skal have to linjer i mysql.user
tabel (og også i mysql.db
tabel i dit tilfælde) for at aktivere begge dele.
For at demonstrere forskellen mellem localhost og 127.0.0.1:
Opretter forbindelse som mysql -h localhost
bruger UNIX-socket-grænsefladen og omgår TCP/IP. Dette kan være lidt bedre for ydeevnen, men det har den effekt på bevillingsmatching, som er beskrevet ovenfor.
Du kan tvinge en lokal TCP/IP-forbindelse ved at oprette forbindelse som mysql -h 127.0.0.1
. Derefter henter den de bevillinger, du har givet til [email protected]%
.
Så for at få den samme bruger, adgangskode og privilegier til både socket-grænsefladen og TCP/IP-grænsefladen, skal du køre alle af følgende udsagn:
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'