Společnost Oracle vytvořila novou větev databázového systému MySQL 9.3.0. Sestavení MySQL Community Server 9.3.0 jsou připravena pro všechny hlavní distribuce Linuxu, FreeBSD, macOS a Windows. V souladu s novým modelem vydávání verzí zavedeným v roce 2023 je MySQL 9.3 zařazeno do větve 'Innovation'. Inovační větve jsou doporučeny pro ty, kteří chtějí dříve přistupovat k nové funkcionalitě, vydávají se každé 3 měsíce a jsou podporovány pouze do vydání další významné verze (například po vydání větve 9.3 byla pozastavena podpora větve 9.2). V létě plánují vytvořit LTS-verzi 9.4, doporučenou pro implementace, které vyžadují předvídatelnost a dlouhodobé zachování stabilního chování. Po LTS-větvi bude vytvořena nová inovační větev — MySQL 10.0.
Hlavní změny v MySQL 9.3:
- Do nástroje mysqldump byla přidána možnost '—users' pro vytváření logických dumpů s informacemi o všech uživatelských účtech, které jsou vyvedeny pomocí SQL příkazů 'CREATE USER' a 'GRANT'. Pro vložení příkazu 'DROP USER' před 'CREATE USER' je k dispozici možnost '—add-drop-user', a pro selektivní zobrazení v dumpu jednotlivých uživatelů – možnosti '—include-user=user@host' a '—exclude-user=user@host', které lze uvést několikrát.
- V enginu MLE (Multilingual Engine Component), který umožňuje používat v uložených procedurách a funkcích kód v jiných jazycích než SQL, byla zlepšena podpora JavaScriptu. Pro uložené procedury v JavaScriptu byl implementován typ 'DECIMAL', který lze použít pro vstupní a vracené argumenty. Ve výchozím nastavení je pro bezpečnost typ DECIMAL MySQL převeden na typ 'String' JavaScriptu, ale toto chování lze předefinovat příkazem 'SELECT mle_set_session_state('{"decimal_type":"Number"}')', po kterém se použije typ 'Number' JavaScriptu. Podporuje se úprava typu DECIMAL pro hodnoty s typy JavaScriptu Boolean, Number, String a BigInt.
- Do uložených procedur v JavaScriptu byla přidána podpora pro nastavení parametrů lokalizace pomocí JavaScript API Intl. Například pro určení aktuální lokality lze použít vlastnosti 'Intl.DateTimeFormat().resolvedOptions().locale', a pro předefinování lokality — metodu 'toLocaleString()'.
- Byly rozšířeny možnosti pro správu knihoven JavaScriptu: pro změnu seznamu importovaných knihoven lze nyní používat výrazy „ALTER PROCEDURE“ a „ALTER FUNCTION“. Byla přidána možnost použít výraz „ALTER LIBRARY“ k přidání, odstranění nebo změně SQL komentáře k knihovně. Pro získání informací o knihovně bylo implementováno vyjádření „SHOW LIBRARY STATUS“.
- Byla přidána podpora dynamického načítání JavaScript knihoven. Pro dynamický import knihovny je třeba použít klíčové slovo „await“, například „let module = await import(‘/db1/lib_${object_type}’)“.
- Byly rozšířeny optimalizace dotazů, které používají kvantifikované srovnávací operátory. Kromě podpory operátorů „=ANY“ a „ALL“ při optimalizaci poddotazů byla v nové verzi přidána podpora operátorů „>ANY“, „>=ANY“, „<ANY“, „ALL“, „>=ALL“, „<ALL“ a „<=ALL“.
- Byl odstraněn plugin „version_tokens“, který byl dříve označen jako zastaralý.
- Bylo zakázáno nastavení hodnoty 0 v systémové proměnné replica_parallel_workers.
- Bylo odstraněno 28 zranitelností, z nichž 26 může být zneužito na dálku při existenci přístupu k odeslání dotazů na DBMS. Šest nejzávažnějších problémů má úroveň nebezpečnosti 6.5 a je spojeno se zranitelnostmi v enginu InnoDB, parseru a optimalizátoru. Méně nebezpečné zranitelnosti se týkají mysqldump, InnoDB, optimalizátoru, DDL, UDF, parseru a systému replikace.
Zdroj: opennet.ru
