Есть ли документация по этому поведению PyMysql / Mysql? - PullRequest
0 голосов
/ 18 мая 2019

Это код pymysql, который я использую для подключения к базе данных.Я тестирую с экземпляром AWS RDS Mysql с версией Mysql 5.7.22.Я получаю сертификат от https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html

pymysql.connect(secret_dict['host'], user=secret_dict['username'],
    passwd=secret_dict['password'], port=port, db=dbname, 
    connect_timeout=5, ssl={'ca': './rds-combined-ca-bundle.pem'})

Этот код работает с моей тестовой базой данных с пользователем с включенным ssl и включенным пользователем wo ssl.- (Через ALTER USER 'encrypted_user' @ '%' REQUIRE SSL;)

Мой вопрос заключается в том, является ли это поведение pymysql верным для любой базы данных MySQL и задокументировано где-либо?Поведение, на которое я ссылаюсь, заключается в том, что если вы добавляете опцию ssl к соединительному вызову, он должен работать (успешное соединение) независимо от того, требуется ли SSL для реального пользователя.Я предпочитаю не тестировать с каждой версией Mysql :)

Взглянув на код pymsql, он, похоже, делает: проверяет , есть ли какие-либо параметры ssl, связанные с запросом,добавляет его к карте ssl, а затем создает объект ctx_object из этой карты ssl и использует этот объект ctx_ при инициализации сокета с базой данных.

1 Ответ

0 голосов
/ 19 мая 2019

Только что нашел это в документации Mysql 7 guide

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

" По умолчанию клиентские программы MySQL пытаются установить зашифрованное соединение, если сервер поддерживает зашифрованные соединения, с дополнительным контролем, доступным через --ssl-modeопция: "

" В отсутствие опции --ssl-mode клиенты пытаются подключиться с использованием шифрования, возвращаясь к незашифрованному соединению, если зашифрованное соединение не может быть установлено. Это также происходит сявный параметр --ssl-mode = PREFERRED. "

" PREFERRED: установить зашифрованное соединение, если сервер поддерживает зашифрованные соединения, и откат к незашифрованному соединению, если зашифрованное соединение не может быть установлено. Это значение по умолчанию, если--ssl-mode не указан. "

ИтакЯ полагаю, что происходит то, что pymysql не указывает опцию ssl-mode, поэтому используемый режим на стороне клиента ssl - PREFERRED, что означает, что клиент (pymysql) будет пытаться установить соединение ssl (что, я думаю, не удается, поскольку пользователь нене требуется), а затем откат к незашифрованному соединению, которое будет успешным.

...