Wie so ziemlich „alle“ verwenden auch wir für diverse Projekte Datenbanken. Hauptsächlich werden bei uns MS SQL Datenbanken eingesetzt. Selbstverständlich aber auch MySQL / MariaDB. In diesem Beitrag möchte ich, anhand eines Beispiels, zeigen, wie ich einen User inkl. Berechtigungen anlege.
Voraussetzungen
Wir benötigen einen MySQL / MariaDB Datenbankserver. In meinem Fall haben wir einen MariaDB Server (10.3), welcher auf einem Ubuntu 20.04 V-Server installiert ist. Um sich ein wenig mehr Komfort zu verschaffen, habe ich in einem früheren Beitrag erläutert, wie man sich eine .my.cnf Konfigurationsdatei anlegen kann um sich direkt mit der Datenbankinstanz zu verbinden. Ohne „jedes mal“ nach Benutzer und Kennwort gefragt zu werden.
Ausgangslage / Szenario
In meinem Beispiel verhält sich das Szenario folgendermaßen. Es wurde via Next.js eine Anwendung erstellt. Der Datenbankzugriff erfolgt über das ORM Prisma. Wie, mittlerweile, üblich gibt es eine Produktiv- sowie eine Entwicklerumgebung. Je nach Umgebung (Environment) werden unterschiedliche Benutzer verwendet. Warum? Da Prisma sich auch um die Migration der Datenbanken kümmert, ist es nötig, einen „höher“ privilegierten Benutzer zu verwenden als in der Produktivumgebung. Wir nennen die Datenbank employees
Berechtigungen der Benutzer
Der „Entwicklungsbenutzer“ benötigt folgende Rechte:
- CREATE
- ALTER
- DROP
- REFERENCES
Die Rechte dürfen nicht an eine Datenbank gebunden werden, sondern müssen „global“ eingerichtet werden. Grund hierfür ist die Funktionsweise von Prisma, diese verwendet für Migrationen eine „Shadow Database„.
Der „Produktivbenutzer“ hingegen, benötigt lediglich die Berechtigungen:
- SELECT
- INSERT
- UPDATE
Einloggen in die Datenbank
Wenn die .my.cnf Datei vorhanden ist, reicht es sich per
mysql
einzuloggen, wenn nicht, ist es nötig den Benutzer und Passwort mit an zugeben
mysql -u schman -p
Datenbank Benutzer anlegen
Hierzu legen wir zwei Benutzer an. Der Entwicklungsuser nennt sich „develop“. Der Produktivnutzer nenn wir „production“.
CREATE USER 'develop'@'%' IDENTIFIED BY 'd0ntKnow1T?'
CREATE USER 'production'@'websrv01' IDENTIFIED BY 'd0ntKnow2T?'
Anmerkung: Das Prozentzeichen (%) wird hier als Platzhalter für alle Hosts verwendet, dass bedeutet, dass sich der User von unterschiedlichen Hosts aus anmelden kann. Der Production Benutzer kann sich nur vom Host ‚websrv01‘ anmelden, wird z.B. versucht sich per Notebook oder ähnlichem mit dem User anzumelden, erhalten wir beim Login ein Access denied.
Datenbank anlegen und Benutzer berechtigen
CREATE DATABASE employees;
develop Benutzer berechtigen
GRANT CREATE, ALTER, DROP, PRIVILEGES ON *.* TO 'develop'@'%';
production Benutzer berechtigen
GRANT SELECT, INSERT, UPDATE ON employees.* TO 'production'@'websrv01';
Was haben wir hier gemacht? Kurz zusammen haben wir dem User (develop bzw. production) Berechtigungen erteilt. Im Falle vom production Benutzer gelten diese Rechte für die komplette employees Datenbank. Der Stern (*) wird als Wildcard verwenden. Es wäre theoretisch sogar möglich einzelne Rechte pro Tabelle zu vergeben
Berechtigungen bestätigen
MySQL / MariaDB halten diese Änderungen nur im Speicher vor. Damit diese persistent gespeichert werden muss daher folgender Befehl ausgeführt werden.
FLUSH PRIVILEGES;
Benutzer löschen bzw. Berechtigungen entfernen
Selbstverständlich ist auch möglich den Benutzern die Rechte zu entziehen bzw. den Benutzer zu löschen
Berechtigungen entziehen
Hierzu bemühen wir folgenden Befehl. Auch hier können alle verwendeten Privilegien kombiniert werden:
REVOKE INSERT, UPDATE ON employees.* FROM production@websrv01;
Im obigen Fall hat der Benutzer production nur das Recht eines „SELECTS“ Die anderen Berechtigungen („INSERT“, „UPDATE“) haben wir entfernt.
Der Benutzer develop wird folgendermaßen entfernt:
DROP USER develop;
Zusammenfassung
Wem das alles zu lange zum Lesen ist, kann auch einfach die Befehle „Step by Step“ ausführen
CREATE USER 'develop'@'%' IDENTIFIED BY 'd0ntKnow1T?'
CREATE DATABASE employees;
GRANT CREATE, ALTER, DROP, PRIVILEGES ON *.* TO 'develop'@'%';
FLUSH PRIVILEGES;
REVOKE INSERT, UPDATE ON employees.* FROM production@websrv01;
DROP USER develop;
Schreibe einen Kommentar