Zend Framework, доступ к моей базе данных запрещен, но только при определенных соединениях Wi-Fi?

0

Это второй раз, когда я заметил это...

Я запускаю приложение Zend Framework на своем ноутбуке, но подключился к моей удаленной базе данных. Он отлично работает в большинстве случаев (из дома и других мест). Но это второй раз, когда я получаю сообщение об ошибке из своего приложения:

SQLSTATE[28000] [1045] Access denied for user 'databaseuser'@'some.ip.address.here' (using password: YES) 

Единственное, что изменилось, это мое соединение wi-fi. Теперь это сообщение постоянно появляется в этом соединении wi-fi, но как только я нахожусь на другом, я не получу это сообщение. Тем не менее, я заметил, что это также произошло однажды при запуске приложения на рабочем сервере и доступе к нему через Wi-Fi.

Что это значит для моего приложения? Как я могу предотвратить это?

  • 0
    Я добавил пару тегов, так как эта проблема, вероятно, не относится к Zend Framework
  • 0
    имеет смысл, спасибо.
Теги:
database-connection
zend-framework
zend-db

1 ответ

5

Обычно для пользователей и IP-адресов хоста клиента часто предоставляются привилегии MySQL (клиент с точки зрения базы данных является хостом, на котором работает ваше приложение PHP).

Ваш Wi-Fi-маршрутизатор, вероятно, распределяет IP-адрес вашего ноутбука с помощью DHCP, поэтому нет гарантии, что он предоставит тот же адрес вашему ноутбуку каждый раз, когда он возобновит соединение.

Я вижу два возможных средства:

  • Некоторые маршрутизаторы позволяют связать определенный IP-адрес с заданным MAC-адресом, чтобы один ПК мог надежно получить тот же IP-адрес (это то, что я делаю в своей домашней сети).

  • Или вы можете открыть привилегии на вашем сервере базы данных с помощью GRANT, чтобы любой IP-адрес в пределах диапазона Адреса DHCP, обслуживаемые вашим маршрутизатором, могут обращаться к базе данных. Пример:

    GRANT ALL ON test.* TO 'databaseuser'@'192.168.1.%' IDENTIFIED BY 'databasepassword';
    

    Однако вы не хотите предоставить открытый доступ к любому IP-адресу, потому что тогда кто-либо из более широкой сети может потенциально связаться с вашим сервером базы данных.


update: Конечно, 192.168.1.% - это внутренняя подсеть, которую вы используете за брандмауэром. Это всего лишь пример, показывающий, что вы можете использовать подстановочные знаки для любого октета в адресе, который вы указываете в инструкции GRANT.

Если вы подключаетесь из дома, у вас, вероятно, есть один внешний IP-адрес, который назначается вашим интернет-провайдером, но это может часто меняться с учетом их политик сетевого управления. У вас может быть возможность получить статический IP-адрес, который, как гарантируется, не изменится, но это обычно стоит больше.

Конечно, если вы подключаетесь из кафе или аэропорта или чего-то еще, ваше соединение будет отображаться как внешний IP-адрес.

Было бы наиболее гибким, конечно, открыть ваши привилегии MySQL, чтобы любой клиент из любого IP-адреса мог подключиться (при условии, что они знают имя пользователя и пароль). Но проблема с этим планом заключается в том, что любой клиент из любого IP-адреса мог бы подключиться, т.е. Даже тогда, когда он не был вами.

  • 0
    или GRANT ALL ON test. * TO 'databaseuser' @ '%' IDENTIFIED BY 'databasepassword';
  • 0
    @SM: Я рекомендую против предоставления доступа к любому IP - адресу клиента.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню