2016-11-01 2 views
-3

Это моя установка (номера IP вымышленные, конечно):MySQLi игнорирует параметр хоста

Сервер (10.0.0.1)

хостов база данных называется database1 с пользователем db_user и пароля db_pass. У этого пользователя есть доступ к базе данных, и удаленные подключения с любого хоста разрешены (я знаю, что это утечка, и я исправлю ее, когда она будет работать)

Обновление 1: Этот сервер не обнаруживает признаков получения соединения (например, connection refused или что-то в этом роде) Порт 3306 открыт

Сервер B (20.0.20.0) хостов PHP скрипт, который подключается к базе данных с помощью следующей команды:

$connection = mysqli_connect("10.0.0.1","db_user","db_pass","database1",3306); 

Мой журнал на Сервер B говорит:

Access denied for user 'db_user'@'20.0.20.0' (using password: YES) in <path-to-php-file> in line 42 

Номер строки соответствует утверждению, поэтому это действительно утверждение, выше которого не удается.

Почему? Я явно указан IP от сервера A (также пытался server-a.com вместо 10.0.0.1)

Update 2: Я побежал следующий запрос через командную строку, как MySQL-Root и это выход:

mysql> SHOW GRANTS FOR 'db_user'; 
GRANT USAGE ON *.* TO 'db_user'@'%' IDENTIFIED BY PASSWORD '<password hash>' 
GRANT ALL PRIVILEGES ON `database1`.* TO 'db_user1'@'%' 

Кажется верным мне. Меня удивляет, что в журнале B он показывает свой адрес (адрес B) вместо A, где находится база данных. Моя идея заключается в том, что он пытается подключиться к базе данных на сервере B, где нет пользователя MySQL db_user.

Update 3: я подключен через SSH к серверу B и побежал mysql --host=10.0.0.1 -udb_user -p и ввел пароль => он работал. SHOW GRANTS FOR current_user; ответил так же, как на сервере A.

+1

20.0.20.0 - это IP-адрес клиента, который пытается подключиться. У вас нет разрешений на подключение, удаленное подключение отключено или данные проверки подлинности неверны. – Allkin

+0

@Allkin, пожалуйста, прочитайте мой вопрос полностью. Я заявил, что на серверах разрешены соединения от ЛЮБОГО хоста. Имя пользователя и пароль скопированы, поэтому я не ожидаю никаких ошибок. – DBX12

+0

Пробовал ли вы без установки 3306, который, кажется, по умолчанию – RST

ответ

1

Если вы не можете подключиться с помощью mysqli, попробуйте вместо этого использовать PDO. Я не уверен, почему, но, видимо, в этом случае работает PDO.

Лично мне нравится PDO лучше, чем mysqli, из-за именованных параметров вместо ? и возможность предоставления массива значений при вызове PDOStatement::execute(). Возможно, вам это тоже понравится.

+0

Я спросил своего хостера об этом странном поведении 'mysqli'. Выключенный, заблокированный mysqli продается как «функция безопасности». 'PDO' работает без проблем. Вероятно, они испортились с библиотекой mysqli, чтобы отправить недействительные учетные данные на удаленный сервер, но забыли о PDO. – DBX12

Смежные вопросы