Не удается подключиться к localhost с помощью mysql-connector-python, ошибка 1130 - PullRequest
0 голосов
/ 23 июня 2018

Я пытаюсь подключиться к локальной базе данных mysql из pyhton, используя mysql-connector-python. Сервер mysql настроен на разрешение только локальных подключений. Он работает со многими другими приложениями, но не в моем скрипте Python. Я использую следующее:

db_config = {'host': 'localhost', 'user': 'aaa', 'password': 'xxx', 'database': 'aaa'}
conn = mysql.connector.connect(**db_config)

и я получаю следующую ошибку:

mysql.connector.errors.DatabaseError: 1130: Host 'static-xxx-xxx-xxx-xxx.net.upcbroadband.cz' is not allowed to connect to this MySQL server

где static-xxx-xxx-xxx-xxx.net.upcbroadband.cz - имя хоста, соответствующее моему общедоступному статическому IP-адресу.

Я попытался изменить параметр host на 127.0.0.1, но это не помогло.

Интересно, что когда я пытаюсь войти в систему с терминала: mysql -h localhost -u aaa -p, проблем не возникает, однако, когда я делаю: mysql -h 127.0.0.1 -u aaa -p, я получаю ту же ошибку,

ERROR 1130 (HY000): Host 'static-xxx-xxx-xxx-xxx.net.upcbroadband.cz' is not allowed to connect to this MySQL server

Возможно ли, что mysql-connector-python каким-то образом преобразует локальный хост в публичный ip?

1 Ответ

0 голосов
/ 24 июня 2018

Оказывается, MASQUERADE был настроен для всех внешних пакетов:

sudo iptables --table nat --list

[...]
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  10.0.0.0/8           anywhere
MASQUERADE  all  --  anywhere             anywhere

Когда я удалил его с помощью sudo iptables -t nat -D POSTROUTING -j MASQUERADE проблема была решена.

Я действительно понял это при попытке

mysql -h localhost --protocol=TCP

, которая снова вызвала ошибку 1130 при преобразовании localhost в публичное имя хоста. Это означает, что, если я правильно понимаю, mysql-connector-python использует TCP по умолчанию, в отличие от команды mysql.

...