Kort om Linux- och MySQL-användarhantering.

Jag fick en fråga på en kund om skillnaden mellan linux-användare (system users) och de användare som finns i MySQL.
Vissa gånger kan det vara lätt att blanda ihop om man sköter sitt eget linux system.
T.ex. en vanlig webbserver med databas där man har MySQL som databasmotor.

Det lättaste att komma ihåg är att MySQL och systemanvändarna är helt skiljda. Det är helt enkelt olika användartabeller.

Lite förenklat så är alla systemanvändare i linux (som nås via t.ex. ssh) är definerade i olika filer (med hjälp av olika verktyg för lösenordsändring, typ passwd):

/etc/passwd – användarnamn, userid, gruppid (primär grupp som användare tillhör), hemkatalog, shell som ska köras vid inloggning typ /bin/bash

/etc/shadow – krypterade lösenorden som tillhör användare

/etc/group – gruppdefinationer, gruppid och medlemmar av sekundära grupper
Mer matnyttig information finns längst ned i denna post.

Det finns undantag, t.ex. om man använder LDAP eller andra centrala användardatabaser – men i detta inlägg förenklar jag och tar inte upp central användarhantering.

MySQL är ett program likt alla andra på ett system men körs ofta som en ”daemon” under linux och exekvieras av en vanlig systemanvändare, ofta som administratörs-användare ”root”.
När MySQL körs så tillhandahållet MySQL en egen miljö för att hantera databaser. Det finns logik , datalagring och användarhantering med mera.
I MySQL lagras användarna i en speciell reserverad tabell ”user” under databas med namnet ”mysql”. Det är mest ett sammanträffande att man använder samma namnkonvention som unix-system där superusern kallas ”root”.

mysql> show tables;
+—————————+
| Tables_in_mysql           |
+—————————+
| columns_priv              |
| db                        |
| func                      |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| proc                      |
| procs_priv                |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user |
+—————————+
17 rows in set (0.01 sec)
17 rows in set (0.01 sec)

I MySQL är användare lagrade på formen permissions och privileges.  Permissions sätts upp med access per databas och även på tabellnivå för läs/skriv samt vilken ”host” som användare får ansluta från % (wildcard, alla hosts) eller per IP/subnät. En bra introduktionsguide till hur man hanterar och administrerar användare i MySQL finns länkade i slutet av denna post.

En likhet mellan systemanvändare och MySQL användare är säkerhetsaspekten. Man bör t.ex. aldrig tillåta ”root” på ett system eller ha en superuser på Mysql som kan logga in från vilket IP/domän som helst.
Man ska alltid försöka begränsa access och ge ut de privilegier som beövs till de databaser som behöver nås – per IP.
Rekommenderar att läsa följande dokumentation för användaradministration i Linux (även andra unix system är liknande): http://www.comptechdoc.org/os/linux/usersguide/linux_ugusers.html
Mer ingående information om MySQL permissions kan finnas här: http://www.databasejournal.com/features/mysql/article.php/3311731/An-introduction-to-MySQL-permissions.htm