MariaDB installeres for å drifte MySQL databasen som nettstedet skal benytte. I tillegg installeres databaseklienten fordi man blant annet da kan kjøre skript med SQL-kommandoer.

Oppdater programvarepakker

Først oppdateres programvarepakker (apt).

~$ sudo apt update

Unix Socket Authentication

Unix Socket based authentication er tilgjengelig i MariaDB Server fra og med versjon 10.4.3

I Ubuntu jammy 22.04 er MariaDB-versjon 10.6.

Dette er en authentication plugin som muliggjør innlogging i MariaDB server med en systembruker man er logget inn med i Ubuntu.

Man kan velge om det skal installeres og tas i bruk eller ikke.  Det er fordeler og ulemper, men sikkerheten skal være bedre enn før.

Se denne artikkelen fra MariaDB for full informasjon om Authentication Plugin – Unix Socket.

Man bør sjekke om det går greit å bruke Unix Socket Authentication ved bruk av f eks MySQL Workbench eller andre databaseprogrammer fra ekstern PC.

Installere MariaDB Server og MariaDB klient

Her installeres både databaseserveren og databaseklienten.  Man kan bruke switch -y i tillegg i denne kommandoen. -y betyr at man svarer «Yes» til alle valg automatisk.

brukernavn@servernavn:~$ sudo apt install  mariadb-server mariadb-client

Kjøre sikkerhetsskript

Installasjon gjør ikke MariaDB Server sikker nok, så dette må ordnes i neste trinn ved å kjøre sikkerhetsskriptet.

Skriptet stiller bruker overfor flere viktige valg:

  • Vil du bytte til Unix Socket Authentication?
  • Skal passord for MariaDB Root lages?
  • Skal anonyme brukere fjernes?
  • Skal Remote Login tillates?
  • Vil du fjerne testdatabasen?
  • Vil du reload privilege tables?

Det anbefales å sjekke pålitelige ressurser for hva som er smart (y eller n), men til syvende og sist må man vurdere selv.

brukernavn@servernavn:~$ sudo mysql_secure_installation

Kjører MariaDB nå?

MariaDB trenger ikke å startes. Vi kan sjekke.  Den kjører automatisk.

brukernavn@servernavn:~$ sudo systemctl status mariadb

[sudo] password for brukernavn:
● mariadb.service – MariaDB 10.6.16 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor prese>
Active: active (running) since….

Innlogging

La oss anta at vi valgte å benytte Unix Socket Auth.

Vi har også root i databasen som vi har angitt passord for.

Men nå er det et nytt regime for autentisering. Vi trenger ikke lenger å bruke root.

Siden vi er innlogget i Ubuntu med vår vanlige sudo-bruker, har vi allerede rettigheter som root i mysql. Vi trenger kun å skrive:

brukernavn@servernavn:~$ sudo mysql

Starte, stoppe, restarte MariaDB Server

Som nevnt kjører MariaDB Server automatisk ved f eks reboot av server. Vi kan likevel stoppe, starte og restartre databaseserver manuelt hvis vi trenger det.

brukernavn@servernavn:~$ sudo service mysql start

brukernavn@servernavn:~$ sudo service mysql stop

brukernavn@servernavn:~$ sudo service mysql restart

mariadb eller mysql?

MariaDB er en såkal fork (forgrening) av MySQL,  en videreutvikling av MySQL. MariaDB er lisensiert under GNU General Public License, en fri offentlig lisens.

Det er utviklere av MySQL som har laget MariaDB. Derfor fungerer MySQL-kommandoer i MariaDB.

MariaDB er pålitelig programvare.

Opprette database

Vi logger inn med sudo mysql og oppretter en ny database.

brukernavn@servernavn:~$ sudo mysql

[sudo] password for brukernavn:

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1056
Server version: 10.6.16-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]>CREATE DATABASE brukerbase;

Se databaser

Kommando SHOW DATABASES; viser databaser:

mariadb show databases

Tildele rettigheter

Bruker ‘nettstedadmin’ tildeles fulle rettigheter på alt, omtrent som root.

MariaDB [ (none) ] >GRANT ALL PRIVILEGES ON *.* to ‘nettstedadmin’@’localhost’ WITH GRANT OPTION;

Flush privileges

For at endringene i rettighetene skal ta effekt brukes følgende kommando:

MariaDB [ (none) ] >FLUSH PRIVILEGES;

SQL syntaks

MariaDB har masse SQL-ressurser på sine nettsider.

Remote administration

Anta at vi skal administrere databasen for utviklingsnettstedet fra en Windows PC som står i lokalnettet.

For å få til det må MariaDB lytte på  serverens nettverkskort. Default lytter MariaDB på localhost (127.0.0.1)  og port 3306.

Men vi ønsker å endre IP til 192.168.1.2, som er IP-adressen på nettverkskortet.

Innlogging fra en Win klient eller annen Linux klient krever at MariaDB konfigureres for å tillate innlogging på et network adapter som er koblet til TCP/IP.

Dette gjøres mulig med direktivet bind-address.

Om bind-address

Description: … In some systems, such as Debian and Ubuntu, the bind_address is set to 127.0.0.1, which binds the server to listen on localhost only. bind_address has always been available as a mariadbd option; from MariaDB 10.3 its also available as a system variable. Before MariaDB 10.6.0 «::» implied listening additionally on IPv4 addresses like «*». From 10.6.0 onwards it refers to IPv6 stictly. Starting with MariaDB 10.11, a comma-separated list of addresses to bind to can be given. See also Configuring MariaDB for Remote Client Access.

    • Commandline: –bind-address=addr
    • Scope: Global
    • Dynamic: No
    • Data Type: string
    • Default Value: (Empty string)
    • Valid Values: Host name, IPv4, IPv6, ::, *

Kilde: https://mariadb.com/kb/en/server-system-variables/

    Sjekk system variabel  bind-address

    bind-address er en Server System Variable.
    bind-address er ikke en dynamisk varabel og kan derfor ikke settes «at runtime».

    Nå sjekker vi hvilken addresse den har:

    MariaDB [(none)]> SELECT * FROM information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME=’BIND_ADDRESS’\G

    VARIABLE_NAME: BIND_ADDRESS
    SESSION_VALUE: NULL
    GLOBAL_VALUE: 127.0.0.1
    1 row in set (0.003 sec)

    Endre bind-address

    bind-address er konfigurert i en eller annen cnf-fil. Det er flere cnf-filer å lete i. Dokumentasjonen sier at bind-address skal være konfigurert i en av disse tre filene:

    /etc/my.cnf
    /etc/mysql/my.cnf
    ~/.my.cnf

    Det stemte ikke for denne serveren.

    På denne serveren var bind-address konfigurert med filen /etc/mysql/mariadb.conf.d/50-server.cnf

    Filen 50-server.cnf  ble derfor redigert:

    sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

     I nano ble 127.0.0.1 endret til 192.168.1.2 (serverens IP).

    Deretter vanlig lagring i nano (Ctrl+o) og avslutte nano (Ctrl+x).

    brukernavn@servernavn:~$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

    bindadress

    Vi sjekker også at port = 3306

    Deretter Lagre Ctrl+O og Avslutte Ctrl+X

    Restart MariaDB

    MariaDB re-startes, evt stoppes og startes på nytt for at den nye konfigurasjonen skal ta effekt.

    brukernavn@servernavn:~$ sudo service mysql restart

    Sjekke bind-address igjen

    MariaDB [(none)]> SELECT * FROM information_schema.SYSTEM_VARIABLES WHERE VARIABLE_NAME=’BIND_ADDRESS’\G

    VARIABLE_NAME: BIND_ADDRESS
    SESSION_VALUE: NULL
    GLOBAL_VALUE: 192.168.1.2
    1 row in set (0.003 sec)

    Output skal nå vise GLOBAL_VALUE: Serverens IP (her eksempelvis 192.168.1.2)

    Nå gjenstår det bare å opprette en bruker i databasen som ikke er root.

    Opprette bruker for tilkobling med MySQL Workbench

    Vi oppretter nå en bruker med navn «wbbruker» som vi kan benytte ved remote tilkobling med MySQL Workbench på PC.

    MariaDB [(none)]>CREATE USER ‘wbbruker’@’%’ IDENTIFIED BY ‘**********’;

    MariaDB [(none)]>GRANT ALL PRIVILEGES ON *.* TO ‘wbbruker’@’%’;

    MariaDB [(none)]>FLUSH PRIVILEGES;

    \q

    brukernavn@servernavn:~$ sudo service mysql restart

    Lage connection i MySQL Workbench

    I MySQL Workbench lages en ny connection for wbbruker.

    mysql workbench

    Nå skal vi kunne koble MySQL Workbench til MariaDB-databasen og jobbe på PC.