Компания Oracle сформировала новую ветку СУБД MySQL 9.3.0. Сборки MySQL Community Server 9.3.0 подготовлены для всех основных дистрибутивов Linux, FreeBSD, macOS и Windows. В соответствии с внедрённой в 2023 году новой моделью формирования релизов, MySQL 9.3 отнесён к веткам «Innovation». Innovation-ветки рекомендованы для тех, кто хочет раньше получать доступ к новой функциональности, публикуются каждые 3 месяца и поддерживаются только до публикации следующего значительного релиза (например, после появления ветки 9.3 прекращена поддержка ветки 9.2). Летом планируют сформировать LTS-релиз 9.4, рекомендованный для внедрений, которым необходима предсказуемость и длительное сохранение неизменного поведения. Следом за LTS-веткой будет сформирована новая Innovation-ветка — MySQL 10.0.
Основные изменения в MySQL 9.3:
- В утилиту mysqldump добавлена опция «—users» для создания логических дампов с информацией о всех учётных записях, выводимой через SQL-выражения «CREATE USER» и «GRANT». Для вставки выражения «DROP USER» перед «CREATE USER» предусмотрена опция «—add-drop-user», а для выборочного отражения в дампе отдельных пользователей — опции «—include-user=user@host» и «—exclude-user=user@host», который можно указывать несколько раз.
- В движке MLE (Multilingual Engine Component), позволяющем использовать в хранимых процедурах и функциях код на языках, отличных от SQL, улучшена поддержка JavaScript.
Для хранимых процедур на языке JavaScript реализован тип «DECIMAL«, который можно использовать для входящих и возвращаемых аргументов. По умолчанию для безопасности MySQL-тип DECIMAL преобразуется в JavaScript-тип «String», но данное поведение можно переопределить командой ‘SELECT mle_set_session_state(‘{«decimal_type»:»Number»}’)’, после которой будет использован JavaScript-тип «Number». Поддерживается приведение к типу DECIMAL значений с JavaScript-типами Boolean, Number, String и BigInt. - В хранимые процедуры на JavaScript добавлена поддержка выставления параметров локализации, используя JavaScript API Intl. Например для определения текущей локали можно использовать свойства «Intl.DateTimeFormat().resolvedOptions().locale», а для переопределения локали — метод «toLocaleString()».
- Расширены возможности для управления библиотеками JavaScript: для изменения списка импортируемых библиотек теперь можно использовать выражения «ALTER PROCEDURE» и «ALTER FUNCTION«. Добавлена возможность использования выражения «ALTER LIBRARY» для добавления, удаления или изменения SQL-комментария к библиотеке. Для получения сведений о библиотеке реализовано выражение «SHOW LIBRARY STATUS«.
- Добавлена поддержка динамической загрузки JavaScript-библиотек.
Для динамического импорта библиотеки следует использовать ключевое слово «await», например «let module = await import(‘/db1/lib_${object_type}’)». - Расширены оптимизации запросов, использующих квантифицированные операторы сравнения. Помимо поддержки операторов «=ANY» и «‹›ALL» при оптимизации подзапросов в новой версии добавлена поддержка операторов «›ANY», «›=ANY», «‹ANY», «‹=ANY», «›ALL», «›=ALL», «‹ALL» и «‹=ALL».
- Удалён плагин «version_tokens«, ранее объявленный устаревшим.
- Запрещено выставление значения 0 в системную переменную replica_parallel_workers.
- Устранено 28 уязвимостей, из которых 26 могут быть эксплуатированы удалённо при наличии доступа для отправки запросов к СУБД. Шесть наиболее серьёзных проблем имеют уровень опасности 6.5 и связаны с уязвимостями в движке InnoDB, парсере и оптимизаторе. Менее опасные уязвимости затрагивают mysqldump, InnoDB, оптимизатор, DDL, UDF, парсер и систему репликации.
Источник: http://www.opennet.ru/opennews/art.shtml?num=63106