Python MySQL соединитель не работает с SSL - PullRequest
0 голосов
/ 18 марта 2019

Я недавно настроил SSL на моем сервере MySQL, и он, кажется, сломал мое приложение на Python.Я могу нормально подключиться к серверу через командную строку:

user@kiosk:~$ mysql -u <user> -p -h <remote host>
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

И SSL, похоже, работает на соединение:

mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using  EditLine wrapper

Connection id:          19
Current database:
...
SSL:                    Cipher in use is DHE-RSA-AES256-SHA
....

Threads: 1  Questions: 17  Slow queries: 0  Opens: 106  Flush tables: 1  Open tables: 99  Queries per second avg: 0.007

Пользователь настроен на требование SSL, и яв настоящее время я не использую CA / client-cert / client-key на моем клиенте для подключения (насколько я понимаю, это необязательно).

Мой скрипт на python использует простое соединение:

db_ip_address = raw_input('Ip Address: ')
db_username = raw_input('Username: ')
db_passwd = raw_input('Password: ')

try:
    db = mysql.connector.connect(
         host=db_ip_address,
         user=db_username,
         passwd=db_passwd,
    )
    cursor = db.cursor()
    connected = True

except Exception as e:
    installer.fatal('\r\n Failed to connect to SQL server please try again \r\n')
    print traceback.format_exception_only(type(e), e)[0]

Который сейчас завершается ошибкой со следующей ошибкой:

ProgrammingError: 1045 (28000): Access denied for user '<user>'@'<IP>' (using password: YES)

Я предполагаю, что это связано с моей конфигурацией SSL, но я не совсем уверен, почему все работает нормально из CLI mysql,но не из моего сценария?

Любое понимание будет с благодарностью.

1 Ответ

1 голос
/ 18 марта 2019

следующая ошибка относится к неправильной информации для входа в систему, такой как ваше имя пользователя или ваш пароль или ваш IP-адрес.если ваше имя пользователя и пароль верны, проверьте разрешенный IP-адрес в вашей базе данных, если% или localhost или 127.0.0.1.для ssl-соединения проверьте следующий код:

import sys

#sys.path.insert(0, 'python{0}/'.format(sys.version_info[0]))

import mysql.connector
from mysql.connector.constants import ClientFlag

config = {
    'user': 'ssluser',
    'password': 'password',
    'host': '127.0.0.1',
    'client_flags': [ClientFlag.SSL],
    'ssl_ca': '/opt/mysql/ssl/ca.pem',
    'ssl_cert': '/opt/mysql/ssl/client-cert.pem',
    'ssl_key': '/opt/mysql/ssl/client-key.pem',
}

cnx = mysql.connector.connect(**config)
cur = cnx.cursor(buffered=True)
cur.execute("SHOW STATUS LIKE 'Ssl_cipher'")
print(cur.fetchone())
cur.close()
cnx.close()

из здесь

и здесь как настроить mysql с помощью ssl

...