localhost
nie pasuje do %
w MySQL. Wydaje się, że powinno, ale w rzeczywistości tak nie jest. Musisz osobno przyznać uprawnienia [email protected]
, zarówno dla USAGE
przywilej i dla przywilejów w każdej bazie danych.
Możesz też połączyć się jako [email protected]
co robi dopasuj %
. Używanie adresu IP dla hosta lokalnego wydaje się działać identycznie z hostem lokalnym, ale tak nie jest. Musisz mieć dwie linie w mysql.user
tabeli (a także w mysql.db
tabeli w twoim przypadku), aby włączyć oba.
Aby zademonstrować różnicę między hostem lokalnym a 127.0.0.1:
Łączenie jako mysql -h localhost
używa interfejsu gniazda UNIX i omija protokół TCP/IP. Może to być nieco lepsze dla wydajności, ale ma to wpływ na opisane powyżej dopasowanie grantów.
Możesz wymusić lokalne połączenie TCP/IP, łącząc się jako mysql -h 127.0.0.1
. Następnie odbierze dotacje, które przyznałeś na [email protected]%
.
Tak więc, aby uzyskać tego samego użytkownika, hasło i uprawnienia zarówno dla interfejsu gniazda, jak i interfejsu TCP/IP, musisz uruchomić wszystkie następujących stwierdzeń:
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'