Отремонтировали в MySQL 8.2

79beca0f10cc239c2ed7c90431b106f7

В конце октября 2023 года компания Oracle выпустила новую версию СУБД (системы управления базами данных) MySQL, обозначенную как MySQL 8.2. Эта версия включает несколько новых функций и изменений, а также устраняет ряд уязвимостей.

Основные изменения и доработки в MySQL 8.2 включают:

  1. Поддержка Webauthn (FIDO2): Добавлена поддержка механизма аутентификации на базе спецификации Webauthn (FIDO2), что позволяет использовать многофакторную аутентификацию и подтверждать подключение к серверу MySQL без паролей. Это позволяет использовать аппаратные токены с поддержкой FIDO2 или биометрическую аутентификацию. Однако, плагин с поддержкой Webauthn доступен только для MySQL Enterprise.

  2. Изменения в аутентификации: Серверный плагин mysql_native_password, который обеспечивает аутентификацию с использованием паролей, теперь переведен в категорию необязательных и может быть отключен. Рекомендуется перейти на использование плагина caching_sha2_password, который использует алгоритм SHA2 для хэширования вместо SHA1.

  3. Оптимизация хэш таблиц: Произведена оптимизация хэш таблиц, что ускоряет выполнение операций EXCEPT и INTERSECT.

  4. Расширенные отладочные возможности: Добавлена поддержка выражения «EXPLAIN FORMAT=JSON» в операциях SELECT, INSERT, REPLACE, UPDATE и DELETE для формирования диагностического вывода в формате JSON. Также добавлено выражение «EXPLAIN FOR SCHEMA» для вывода диагностики, связанной только с определенной схемой данных.

  5. Утилита mysqldump: В утилиту mysqldump добавлена опция »--output-as-version», которая позволяет создавать дампы, совместимые с определенными старыми версиями MySQL. Это полезно, если вам нужно поддерживать устаревшую терминологию, такую как «master/slave».

  6. Именованные атрибуты в параметризованных запросах: В клиентскую библиотеку на C добавлена возможность использования именованных атрибутов в параметризованных запросах при помощи новой функции mysql_stmt_bind_named_param(), которая заменяет функцию mysql_stmt_bind_param().

  7. Упрощение распределения SQL-трафика: Упрощено распределение SQL-трафика в кластере из MySQL-серверов, предоставляя возможности для организации прозрачных для приложений подключений к вторичным или первичным серверам.

  8. Новые привилегии: Добавлена новая привилегия SET_ANY_DEFINER, которая предоставляет право создания объектов с выражением DEFINER, а также привилегия ALLOW_NONEXISTENT_DEFINER для защиты объектов с отсутствующим владельцем.

  9. Изменения в терминологии репликации: В рамках корректировки неполиткорректной терминологии, связанной с репликацией, объявлены устаревшими некоторые выражения, такие как RESET MASTER, SHOW MASTER STATUS, SHOW MASTER LOGS и PURGE MASTER LOGS. Вместо них рекомендуется использовать выражения RESET BINARY LOGS AND GTIDS, SHOW BINARY LOG STATUS, SHOW BINARY LOGS и PURGE BINARY LOGS.

Что касается уязвимостей в MySQL 8.0, перечислены следующие уязвимости (CVE):

  • CVE-2023–34034: Уязвимость связана с MySQL Enterprise Monitor и может быть использована для мониторинга. Эта уязвимость имеет высокий уровень опасности и оценена на 9.8 по шкале CVSS. Она существует в версиях 8.0.35 и более ранних версиях.

  • CVE-2022–42898: Эта уязвимость связана с MySQL Cluster и имеет низкий уровень опасности. Она влияет на версии 8.0.34 и более ранние, а также 8.1.0.

  • CVE-2023–22102: Уязвимость в MySQL Connectors, точнее в Connector/J, связана с MySQL Protocol и оценена на высокий уровень опасности. Она существует в версиях 8.1.0 и более ранних.

  • Другие уязвимости также оценены по разным уровням опасности и могут повлиять на различные компоненты MySQL, включая сервер и различные библиотеки.

Две из уязвимостей связаны с использованием пакета Curl и библиотеки OpenSSL, и могут быть эксплуатированы злоумышленниками удаленно.

Примечания к функциям и операторам SQL

Ошибка, связанная с функцией STR_TO_DATE () в MySQL, касается проблемы в процессе преобразования строк в даты. Конкретно, эта функция предоставляет возможность преобразовывать текстовые строки в формате даты и времени внутри базы данных MySQL в структурированный формат даты. Ошибка заключается в том, что STR_TO_DATE () не выполняла полную проверку диапазона даты в строке, которую вы пытались преобразовать. Это могло привести к преобразованию некорректной строки в дату.

Пример ошибки:

Если вы передавали строку '2021–11–31' функции STR_TO_DATE (), она должна была преобразовать эту строку в дату. Однако ноябрь имеет только 30 дней, и 31 число некорректно. Стандартная логика должна была обнаружить такую неверную дату и выдать ошибку. Вместо этого функция STR_TO_DATE () позволяла эту строку преобразовать в некорректную дату без каких-либо предупреждений.

Для решения этой проблемы, вероятно, было внесено обновление в MySQL, которое улучшает проверку дат внутри функции STR_TO_DATE (). Это гарантирует, что функция будет выдавать ошибку при попытке преобразовать некорректные даты, такие как '2021–11–31', и тем самым увеличит точность и надежность операций преобразования дат в базе данных MySQL.

Это изменение в функции STR_TO_DATE () является частью общей практики улучшения надежности и безопасности операций в базах данных. Это важно для предотвращения некорректных данных и ошибок, которые могут возникнуть в результате неправильного преобразования данных.

Параллельное выполнение событий (многопоточная реплика)

Обновление в MySQL, связанное с возможностью выполнения параллельных событий (Parallel Event Execution) с многозадачным репликатором (Multithreaded Replica), предоставляет улучшенную совместимость между опцией SQL_AFTER_GTIDS и многозадачным репликатором (MTA).

До этого обновления, когда MTA был включен (то есть, когда параметр replica_parallel_workers был установлен больше 1), и пользователь пытался использовать опцию SQL_AFTER_GTIDS, система генерировала предупреждение с кодом ER_MTS_FEATURE_IS_NOT_SUPPORTED, и реплика переходила в однопоточный режим. Это ограничение делало невозможным использование опции SQL_AFTER_GTIDS с многозадачным репликатором.

С новым обновлением это больше не является проблемой. Теперь реплика, которая должна догнать недостающие транзакции, может это сделать, используя опцию SQL_AFTER_GTIDS, и при этом получать преимущества в производительности от многозадачного выполнения.

Это обновление позволяет более гибко управлять репликацией в среде с многозадачным репликатором, обеспечивая эффективное применение событий, даже если реплика должна наверстать пропущенные транзакции. Для получения более подробной информации о данном обновлении и способах его использования, вы можете обратиться к документации MySQL, конкретно к разделам «START REPLICA Statement» и описанию параметра системы replica_parallel_workers (WL #15755).

Примечания к оптимизатору

Оптимизация хэш-таблиц для операций SET (EXCEPT и INTERSECT) в MySQL 8.2 представляет собой важное улучшение в производительности запросов, в которых используются эти операции. Давайте разберем эту оптимизацию более подробно:

  1. SET-операции EXCEPT и INTERSECT: В контексте языка SQL, операции EXCEPT и INTERSECT выполняются над двумя наборами данных и возвращают результат, состоящий из различий или пересечений между этими наборами. Например, операция EXCEPT возвращает все строки, которые есть в первом наборе данных, но отсутствуют во втором наборе, а операция INTERSECT возвращает только общие строки между двумя наборами данных.

  2. Новая хэш-таблица оптимизации: В MySQL 8.2 была внедрена новая оптимизация для выполнения SET-операций. Эта оптимизация включается автоматически для запросов, использующих операции EXCEPT и INTERSECT. Она использует хэш-таблицу для ускорения выполнения этих операций, что может значительно повысить производительность запросов, особенно при работе с большими объемами данных.

  3. Контроль оптимизации: Важно отметить, что оптимизация хэш-таблицы для SET-операций включена по умолчанию. Однако, если по какой-то причине вы хотите вернуться к предыдущему методу выполнения запросов с использованием временных таблиц, то в MySQL 8.2 предоставлена опция hash_set_operations, которая может быть установлена в значение «off». Это приведет к использованию предыдущей оптимизации с временными таблицами.

  4. Управление памятью: Кроме того, оптимизация хэш-таблицы может потреблять определенное количество оперативной памяти. Эту память можно контролировать с помощью настройки set_operations_buffer_size. Увеличение размера буфера памяти может дополнительно улучшить время выполнения запросов, использующих операции SET, за счет увеличения доступной памяти для оптимизации.

  5. Ссылка на дополнительную информацию: Если вам нужны более подробные сведения о этой оптимизации и как ее настраивать, вы можете обратиться к разделу «Switchable Optimizations» (WL #15257) в документации MySQL.

Эта оптимизация в MySQL 8.2 предоставляет значительное улучшение производительности при выполнении операций SET (EXCEPT и INTERSECT) и позволяет более эффективно работать с данными, особенно в случае больших объемов информации.

Примечания к упаковке

Эти заметки касаются улучшений и изменений в упаковке MySQL 8.2:

  1. Обновление определения пакета MSI для Windows Installer XML (WiX) toolset: В MySQL 8.2 были внесены изменения в определение пакета MSI для Windows. Эти файлы определения пакета MSI обновлены для работы с версией инструмента Windows Installer XML (WiX) toolset версии 4. Пожалуйста, обратите внимание, что эти обновленные определения пакета MSI больше не могут быть использованы с предыдущими версиями WiX toolset.

    Что это означает:

    • Разработчики MySQL обновили определение пакета MSI для установки MySQL на Windows. Это обновление позволяет лучше использовать новейшие возможности и улучшения, предоставляемые WiX toolset версии 4.

    • Однако важно отметить, что если вы планируете использовать эти обновленные файлы определения пакета MSI, вам необходимо иметь установленную версию WiX toolset версии 4 или выше.

  2. Обновление библиотеки libedit: В MySQL 8.2 также произошло обновление встроенной библиотеки libedit до версии 20221030–3.1.

    Что это означает:

    • Библиотека libedit — это библиотека, которая предоставляет функциональность для редактирования текста в интерактивной командной оболочке или среде. Она используется в MySQL для обработки ввода команд от пользователя в интерактивной оболочке.

    • Обновление библиотеки libedit до новой версии может включать исправления ошибок, улучшения производительности и новые функции. Таким образом, эта актуализация способствует более надежной и эффективной работе интерактивных сеансов MySQL.

Оба эти изменения направлены на улучшение стабильности, производительности и совместимости MySQL 8.2, особенно в среде Windows, и обновление библиотеки libedit обеспечивает более надежную работу с интерактивными командами.

Примечания к схеме производительности

Эти заметки касаются некоторых изменений и добавлений в Performance Schema (подсистема для мониторинга и анализа производительности MySQL) в конкретной версии MySQL. Давайте более подробно разберем каждый пункт:

  1. Проблема с SUM_ROWS_EXAMINED: В Performance Schema, есть таблица events_statements_summary_by_digest, которая содержит информацию о выполненных SQL-запросах. Однако в ней была проблема с колонкой SUM_ROWS_EXAMINED, которая не правильно считала количество строк при использовании Index Merge. Эта проблема была устранена и исправлена в данной версии MySQL, исходя из упомянутого Bug #35616015.

  2. Добавление Performance Schema Server Telemetry Metrics service: В данной версии MySQL была добавлена служба Server Telemetry Metrics для Performance Schema. Эта служба предоставляет интерфейс, позволяющий плагинам и компонентам опрашивать телеметрические счетчики (группы метрик), метрики и измерения метрик. Эти данные могут экспортироваться периодически с использованием протокола Open Telemetry.

  3. Добавлены статусные переменные: В рамках Server Telemetry Metrics были добавлены новые статусные переменные, такие как Telemetry_metrics_supported и Performance_schema_meter_lost. Эти переменные предоставляют информацию о поддержке телеметрии и о потере измерений метрик Performance Schema.

  4. Добавлены системные переменные: Кроме того, введены новые системные переменные, включая performance_schema_max_meter_classes и performance_schema_max_metric_classes. Эти переменные позволяют настраивать максимальное количество классов счетчиков и метрик для Performance Schema.

  5. Изменение значения по умолчанию для performance_schema_max_rwlock_classes: Значение по умолчанию для системной переменной performance_schema_max_rwlock_classes было изменено с 60 на 100. Это изменение сделано для лучшей адаптации к растущему количеству объектов блокировок чтения/записи (rwlocks) в системе.

В целом, эти изменения и добавления в Performance Schema позволяют пользователям MySQL более точно мониторить и анализировать производительность базы данных, а также собирать телеметрические данные для более эффективного мониторинга и оптимизации работы MySQL-сервера.

Примечания по безопасности

Эти заметки касаются обновления бинарных пакетов MySQL, которые включают в себя библиотеку curl, а не связываются с системной библиотекой curl. Давайте разберемся, что это означает более подробно:

  1. Обновление до curl 8.4.0: В данной версии MySQL, бинарные пакеты (предварительно собранные версии MySQL, доступные для загрузки) были обновлены для использования версии библиотеки curl 8.4.0. Curl — это библиотека и утилита для передачи данных по сети с использованием различных протоколов, таких как HTTP, FTP, и других. Это обновление curl может включать в себя важные улучшения и исправления, связанные с безопасностью.

  2. Важные исправления в curl 8.4.0: Для получения дополнительной информации об изменениях и исправлениях, внесенных в версию curl 8.4.0, вам рекомендуется посетить страницу https://curl.se/docs/security.html. Эта страница вероятно содержит подробную информацию об уязвимостях, которые были устранены в этой версии curl, и о том, какие шаги были предприняты для обеспечения безопасности при работе с curl.

  3. Ссылки на связанные баги: В заметках также указывается на баг с номером #35709229, что может быть связано с дополнительными деталями или обсуждением связанных с этим обновлением вопросов безопасности.

Обновление библиотеки curl в MySQL может быть важным с точки зрения безопасности, так как это может помочь в предотвращении возможных уязвимостей, связанных с обработкой сетевых запросов и передачей данных. Поэтому, если вы используете MySQL, рекомендуется обновиться до последней версии, чтобы убедиться в безопасности и стабильности вашей базы данных.

Новые функциональные изменения и важные изменения в СУБД MySQL 8.2 включают следующее:

Инсопостимое изменение: Обновление библиотеки libfido2

  • В этой версии MySQL была обновлена библиотека libfido2 до версии 1.13.0. Однако это обновление требует OpenSSL версии 1.1.1 и выше. В результате обновления, аутентификационные плагины authentication_fido и authentication_fido_client больше не доступны на некоторых платформах, включая Enterprise Linux 6 и 7, Solaris 11 и SLES 12. Это связано с изменениями в зависимостях, и пользователи на упомянутых платформах должны быть внимательны к этому изменению.

Важное изменение: Обновление OpenSSL

  • Для платформ, на которых библиотеки OpenSSL упакованы с MySQL Server, связанная с MySQL Server OpenSSL библиотека была обновлена до версии 3.0.10. Это изменение позволяет внедрить исправления, предоставленные в версии 3.0.10 библиотеки OpenSSL. Больше информации о проблемах, решенных в OpenSSL версии 3.0.10, можно найти на официальном сайте OpenSSL.

Важное изменение: Поддержка новых платформ

  • В MySQL 8.2 была добавлена поддержка новых платформ: Debian 12, Fedora 39, macOS 14 и Ubuntu 23.10. Таким образом, пользователи этих операционных систем могут использовать MySQL 8.2 и воспользоваться всеми новыми возможностями.

Изменения в mysqldump

  • Для утилиты mysqldump были внесены несколько изменений. Введена опция --ignore-views, которая позволяет пропустить таблицы-представления (views) при создании дамп-файла. Это может быть полезно, если вы не хотите включать представления в дамп вашей базы данных.

  • Также для mysqldump добавлены опции --init-command и --init-command-add, которые позволяют выполнять SQL-запросы после подключения к серверу MySQL или повторного подключения. Эти опции предоставляют дополнительные возможности для настройки и подготовки сервера перед выполнением операций дампа.

Изменения в mysql

  • Для клиентской утилиты mysql была добавлена опция --init-command-add, которая также позволяет выполнять дополнительные SQL-запросы после подключения или повторного подключения к серверу MySQL. Эта опция подобна опции --init-command.

Новая опция --no-login-paths

  • В MySQL 8.2 добавлена новая командная опция --no-login-paths, которая отключает обработку «login paths» (пути для аутентификации) при подключении к серверу MySQL. Эта опция была добавлена к каждому клиенту MySQL, который поддерживает опцию --login-path. Она полезна, если вы хотите игнорировать сохраненные «login paths» и выполнить подключение без них.

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

В целом, MySQL 8.2 предоставляет новые функции, улучшения производительности и устранение уязвимостей, что делает его интересным обновлением для пользователей MySQL.

© Habrahabr.ru