localhost
không khớp với %
trong MySQL. Có vẻ như điều đó nên xảy ra, nhưng thực tế thì không. Bạn phải cấp riêng các đặc quyền cho [email protected]
, cả cho USAGE
đặc quyền và các đặc quyền trên mỗi cơ sở dữ liệu.
Hoặc bạn có thể kết nối dưới dạng [email protected]
cái nào hiện khớp với %
. Sử dụng địa chỉ IP cho localhost có vẻ như nó sẽ hoạt động giống hệt localhost, nhưng không. Bạn cần có hai dòng trong mysql.user
bảng (và cả trong mysql.db
trong trường hợp của bạn) để bật cả hai.
Để chứng minh sự khác biệt giữa localhost và 127.0.0.1:
Đang kết nối dưới dạng mysql -h localhost
sử dụng giao diện ổ cắm UNIX và bỏ qua TCP / IP. Điều này có thể tốt hơn một chút về hiệu suất, nhưng nó có ảnh hưởng đến việc đối sánh tài trợ được mô tả ở trên.
Bạn có thể buộc kết nối TCP / IP cục bộ bằng cách kết nối dưới dạng mysql -h 127.0.0.1
. Sau đó, nó sẽ nhận các khoản tài trợ bạn đã thực hiện cho [email protected]%
.
Vì vậy, để có được người dùng, mật khẩu và đặc quyền giống nhau cho cả giao diện socket và giao diện TCP / IP, bạn cần chạy tất cả trong số các câu sau:
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'