MariaDB-grants forklaret: Alle privilegier
En komplet oversigt over alle MariaDB-privilegier — fra SELECT til SUPER — og hvad hvert privilegium giver dig lov til at gøre.
MariaDB-grants forklaret: Alle privilegier, og hvad de tillader
MariaDB styrer, hvad en bruger må, gennem privilegier, som tildeles med GRANT-kommandoen og fjernes med REVOKE. At forstå præcis, hvad hvert privilegium tillader, er afgørende for at holde dine databaser sikre: Den gyldne regel er kun at give hver bruger de privilegier, vedkommende faktisk har brug for (princippet om færrest mulige rettigheder).
Sådan fungerer grants
Et privilegium i MariaDB kan tildeles på flere niveauer:
| Niveau | Gælder for | Eksempel |
|---|---|---|
| Globalt | Hele serveren | GRANT PROCESS ON *.* TO 'potion'@'localhost'; |
| Database | Alle objekter i én database | GRANT SELECT ON shop.* TO 'potion'@'localhost'; |
| Tabel | En enkelt tabel eller view | GRANT INSERT ON shop.orders TO 'potion'@'localhost'; |
| Kolonne | Bestemte kolonner i en tabel | GRANT SELECT (name, email) ON shop.customers TO 'potion'@'localhost'; |
| Rutine | En stored procedure eller funktion | GRANT EXECUTE ON PROCEDURE shop.report TO 'potion'@'localhost'; |
Du kan se en brugers nuværende rettigheder med:
SHOW GRANTS FOR 'potion'@'localhost';
Privilegier træder i kraft med det samme, når de tildeles med GRANT. Hvis du redigerer privilegietabellerne direkte, skal du køre FLUSH PRIVILEGES, før ændringerne slår igennem.
Alle privilegier i overblik
| Privilegium | Kategori | Niveauer | Hvad det tillader |
|---|---|---|---|
SELECT |
Data | Globalt, DB, tabel, kolonne | Læse rækker fra tabeller og views. Kræves for enhver forespørgsel, der læser tabeldata. |
INSERT |
Data | Globalt, DB, tabel, kolonne | Tilføje nye rækker til en tabel med INSERT. |
UPDATE |
Data | Globalt, DB, tabel, kolonne | Ændre eksisterende rækker med UPDATE. |
DELETE |
Data | Globalt, DB, tabel | Slette rækker fra en tabel med DELETE. |
DELETE HISTORY |
Data | Globalt, DB, tabel | Slette historiske rækker fra systemversionerede tabeller med DELETE HISTORY. (10.3.4+) |
CREATE |
Struktur | Globalt, DB, tabel | Oprette nye databaser og tabeller. På tabelniveau kun netop det tabelnavn. |
ALTER |
Struktur | Globalt, DB, tabel | Ændre tabelstruktur med ALTER TABLE — tilføje kolonner, ændre typer, omdøbe. |
DROP |
Struktur | Globalt, DB, tabel | Slette databaser, tabeller og views helt. Kræves også for TRUNCATE TABLE. Destruktivt — tildel med omtanke. |
INDEX |
Struktur | Globalt, DB, tabel | Oprette og slette indekser med CREATE INDEX / DROP INDEX. |
CREATE VIEW |
Struktur | Globalt, DB, tabel | Oprette views med CREATE VIEW. |
SHOW VIEW |
Struktur | Globalt, DB, tabel | Se et views definition med SHOW CREATE VIEW (forespørgsler kræver kun SELECT). |
CREATE TEMPORARY TABLES |
Struktur | Globalt, DB | Oprette midlertidige tabeller, der kun findes i sessionen og er usynlige for andre brugere. |
REFERENCES |
Struktur | Globalt, DB, tabel, kolonne | Oprette fremmednøgler, der peger på tabellen. |
CREATE TABLESPACE |
Struktur | Globalt | Reserveret til tablespace-administration; findes af kompatibilitetshensyn og har ringe praktisk betydning i MariaDB. |
CREATE ROUTINE |
Rutiner & events | Globalt, DB | Oprette stored procedures og functions. |
ALTER ROUTINE |
Rutiner & events | Globalt, DB, rutine | Ændre eller slette stored procedures og functions. Den, der opretter en rutine, får det automatisk til den. |
EXECUTE |
Rutiner & events | Globalt, DB, rutine | Køre stored procedures og functions med CALL eller i forespørgsler. |
TRIGGER |
Rutiner & events | Globalt, DB, tabel | Oprette og slette triggers på en tabel. |
EVENT |
Rutiner & events | Globalt, DB | Oprette, ændre og slette planlagte events — MariaDBs indbyggede opgaveplanlægger. |
GRANT OPTION |
Administration | Alle niveauer | Give egne privilegier videre til andre (WITH GRANT OPTION). Aldrig mere, end brugeren selv har. |
CREATE USER |
Administration | Globalt | Administrere konti: CREATE USER, DROP USER, RENAME USER, REVOKE ALL PRIVILEGES. |
RELOAD |
Administration | Globalt | Køre FLUSH-kommandoer (FLUSH PRIVILEGES, FLUSH TABLES, FLUSH LOGS, ...). |
PROCESS |
Administration | Globalt | Se alle brugeres kørende forespørgsler via SHOW PROCESSLIST. Følsomt — forespørgsler kan indeholde data eller adgangskoder. |
SUPER |
Administration | Globalt | Bred admin-magt: KILL andres forbindelser, SET GLOBAL, logge på trods max_connections, skrive trods read_only, styre replikering. Delt op i finkornede privilegier fra 10.5.2. |
SHUTDOWN |
Administration | Globalt | Stoppe serveren med SHUTDOWN eller mariadb-admin shutdown. |
FILE |
Administration | Globalt | Læse/skrive filer på databaseserveren via LOAD DATA INFILE, SELECT ... INTO OUTFILE, LOAD_FILE(). En klassisk angrebsvektor — tildel sjældent, om overhovedet. |
SHOW DATABASES |
Administration | Globalt | Se den fulde databaseliste; uden det ses kun databaser, brugeren har privilegier til. |
LOCK TABLES |
Administration | Globalt, DB | Låse tabeller eksplicit med LOCK TABLES (kræver også SELECT). Bruges af backupværktøjer som mariadb-dump. |
USAGE |
Administration | Globalt | "Ingen privilegier" — brugeren kan logge på, men intet andet. Alle konti har det implicit. |
PROXY |
Administration | Globalt | Optræde som en anden konto og overtage dens privilegier. Bruges primært med autentificerings-plugins. |
REPLICATION CLIENT / BINLOG MONITOR |
Replikering | Globalt | Statuskommandoer som SHOW MASTER STATUS og SHOW BINARY LOGS. Omdøbt til BINLOG MONITOR i 10.5+ (gammelt navn virker som alias). |
REPLICATION SLAVE |
Replikering | Globalt | Læse replikeringshændelser fra den primære servers binærlog — kræves af replikaens forbindelseskonto. |
REPLICATION MASTER ADMIN |
Replikering | Globalt | Administrere den primære side: SHOW REPLICA HOSTS, globale variabler for den primære. (10.5.2+) |
REPLICATION SLAVE ADMIN |
Replikering | Globalt | Administrere replika-siden: START/STOP SLAVE, CHANGE MASTER TO, relaterede variabler. (10.5.2+) |
SLAVE MONITOR |
Replikering | Globalt | SHOW SLAVE STATUS og SHOW RELAYLOG EVENTS uden fulde admin-rettigheder — nyttigt til overvågning. (10.5.9+) |
BINLOG ADMIN |
Replikering | Globalt | Administrere selve binærloggen: PURGE BINARY LOGS, binlog-relaterede globale variabler. (10.5.2+) |
BINLOG REPLAY |
Replikering | Globalt | Afspille binærlog-indhold, f.eks. anvende mariadb-binlog-output med BINLOG-kommandoer. (10.5.2+) |
CONNECTION ADMIN |
SUPER-afløsere | Globalt | Afbryde andres forbindelser/forespørgsler, logge på ud over max_connections, ændre forbindelsesrelaterede globale variabler. (10.5.2+) |
READ_ONLY ADMIN |
SUPER-afløsere | Globalt | Skrive til serveren, selv når globalt read_only er slået til. Udeladt af ALL PRIVILEGES fra 10.11. (10.5.2+) |
FEDERATED ADMIN |
SUPER-afløsere | Globalt | Administrere FEDERATED/FederatedX-servere: CREATE/ALTER/DROP SERVER. (10.5.2+) |
SET USER |
SUPER-afløsere | Globalt | Sætte DEFINER på views, rutiner, triggers og events til en anden bruger — relevant ved gendannelse af dumps. (10.5.2+) |
ALL PRIVILEGES
GRANT ALL PRIVILEGES giver alle privilegier på det valgte niveau, undtagen GRANT OPTION (og fra MariaDB 10.11 også READ_ONLY ADMIN). Et typisk mønster på hostingplatforme er at give en kunde fuld kontrol over sin egen database:
GRANT ALL PRIVILEGES ON kunde_db.* TO 'kunde'@'%';
Det gør brugeren almægtig inden for netop den database, mens administration af hele serveren forbliver utilgængelig.
Praktiske eksempler
En bruger, der kun må læse (f.eks. til rapportering):
CREATE USER 'rapport'@'%' IDENTIFIED BY 'staerk-adgangskode';
GRANT SELECT ON shop.* TO 'rapport'@'%';
En typisk webapplikationsbruger:
CREATE USER 'webapp'@'%' IDENTIFIED BY 'staerk-adgangskode';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'webapp'@'%';
En backup-bruger:
CREATE USER 'backup'@'localhost' IDENTIFIED BY 'staerk-adgangskode';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup'@'localhost';
Fjern et privilegium igen:
REVOKE DELETE ON shop.* FROM 'webapp'@'%';
Opsummering
- Tildel de færrest mulige privilegier — start med
SELECT, INSERT, UPDATE, DELETEtil applikationer, og tilføj kun mere, når der er behov. - Betragt
FILE,SUPER,PROCESS,SHUTDOWNogGRANT OPTIONsom forbeholdt administratorer. - Brug
SHOW GRANTSjævnligt til at gennemgå, hvad dine brugere kan. - På MariaDB 10.5+ bør du foretrække de finkornede admin-privilegier frem for SUPER.