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

Я уже второй раз замечаю это ...

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

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

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

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

1 Ответ

5 голосов
/ 21 декабря 2009

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

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

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

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

  2. Или вы можете открыть привилегии на сервере базы данных с помощью оператора 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-адреса может подключиться , т. Е. Даже если это не вы.

...