MySQL 9.0: Nå kan du kjøre JavaScript i databasen

Oracle både fjerner og legger til mye i MySQL 9.0 Innovation.

Illustrasjonsfoto. 📸: NTB / Shutterstock
Illustrasjonsfoto. 📸: NTB / Shutterstock Vis mer

Oracle kom nylig med en rekke oppdateringer til flere versjoner av MySQL. Mens 8.x-versjonene stort sett fikk bug- og sikkerhetsfikser, lanserte Oracle også MySQL 9.0 Innovation – med flere spennende nyheter. Det skriver Infoworld.

Oracle har lagt ut en oversikt over alt som er nytt i MySQL 9.0 her, men kort fortalt inkluderer det blant annet:

Lagre og kjør JavaScript

En av de største nyhetene i MySQL 9 Enterprise Edition er at databaseserveren nå støtter Javascript stored programs.

Det betyr at du kan skrive JavaScript-kode som lagres på databaseserveren, som du kan kalle fra et SQL-uttrykk. Du kan for eksempel opprette og lagre en JavaScript-funksjon slik:

CREATE FUNCTION gcd_js (a INT, b INT) RETURNS INT 
LANGUAGE JAVASCRIPT AS $$

  let [x, y] = [Math.abs(a), Math.abs(b)];
  while(y) [x, y] = [y, x % y];
  return x;

$$;

Og så kan du kalle den på denne måten:

SELECT col1, col2, gcd_js(col1,col2)
FROM my_table
WHERE gcd_js(col1, col2) > 1
ORDER BY gcd_js(col1, col2);

CREATE TABLE gcd_table 
AS SELECT gcd_js(col1,col2)
FROM my_table;

Øystein Grøvlen og Farhan Tauheed i Oracle skrev før jul en fyldig bloggpost om fordelene ved å kunne lagre og kjøre JavaScript i databasen.

Blant fordelene de nevner er blant annet at du reduserer behovet for overføre data mellom klient og databaseserver – men kan gjøre mer lokalt på databaseserveren.

I blogginnlegget legges det også vekt på at det finnes veldig mange utviklere som behersker JavaScript, og at det kan være nyttig for bedrifter å kunne bruke disse utviklerne også til backendutvikling.

Koden kjører i et sikkert og isolert miljø; Oracle GraalVM. Ved å kjøre en en VM skal ikke eventuelt ondsinnet kode kunne kompromittere noe i MySQL-serveren utenfor VM-en den kjører i.

Fjerner usikker autentisering

Med MySQL 9.0 Innovation fjernes nå autentiserings-pluginen mysql_native_password. Denne har vært merket som "deprecated" og lastes ikke som standard i MySQL 8.4 LTS – men i 9.0 er den altså fjernet helt.

I et blogginnlegg skriver Oracles Frederic Descamps at mysql_native_password har blitt regnet for å være usikker sammenlignet med mer moderne autentiseringsmetoder – som caching_sha2_password, som er standard nå:

  • Bruker en svak hashing-algoritme: mysql_native_password bruker SHA-1 til hashing, som ifølge Descamps regnes som svak og utsatt for enkelte typer kryptografiske angrep.
  • Bruker ikke salt når den hasher passord. Det vil si at det ikke legges til tilfeldige data til passordet før hashing for å gjøre det vanskeligere for angripere å knekke passordet.
  • Ingen iterasjoner: Sikrere hashingmetoder bruker mange iterasjoner av hashing-funksjonen for å gjøre brute-force-angrep mer tidkrevende å gjennomføre.

Du finner en oversikt over alle endringene her.