Dieses Tutorial enthält vollständige Schritte zum Entwerfen eines Datenbankschemas eines rollenbasierten Zugriffssteuerungssystems (RBAC) zum Verwalten der Benutzer, Rollen und Berechtigungen. Es kann ferner verwendet werden, um den Zugriff auf bestimmte Ressourcen basierend auf bestimmten Berechtigungen zu entscheiden. Die Verwendung eines RBAC-Systems sollte als integraler Bestandteil jeder Anwendung betrachtet werden, die die Ressourcen von mehreren Benutzern gemeinsam nutzt. Z.B. Die Mitarbeiter einer Organisation können basierend auf den ihnen zugewiesenen Berechtigungen auf die Produkte zugreifen oder diese verwalten. Idealerweise können die Berechtigungen über Rollen vergeben werden.
Das Entity-Relationship-Diagramm oder visuelle Datenbankdesign ist unten dargestellt.
Abb. 1
Notizen :Die in diesem Tutorial besprochenen Rollen- und Berechtigungstabellen können zu den Anwendungsdatenbanken hinzugefügt werden, die in den Tutorials „Blog“ und „Poll &Survey“ besprochen werden. Dieses Tutorial geht davon aus, dass die Berechtigungen auf Codeebene hartcodiert sind, um den Zugriff zu prüfen.
Sie können auch die beliebten Tutorials besuchen, darunter How To Install MySQL 8 on Ubuntu, How To Install MySQL 8 on Windows, Blog Database in MySql, Poll and Survey Database in MySql und Learn Basic SQL Queries In MySQL.
RBAC-Datenbank
Der allererste Schritt besteht darin, die RBAC-Datenbank zu erstellen. Es kann mit der unten gezeigten Abfrage erstellt werden.
CREATE SCHEMA `rbac` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ich habe den Zeichensatz utf8mb4 verwendet um eine Vielzahl von Zeichen zu unterstützen.
Benutzertabelle
In diesem Abschnitt entwerfen wir die Benutzertabelle Benutzerinformationen zu speichern. Nachfolgend finden Sie die Beschreibung aller Spalten der Benutzertabelle.
ID | Die eindeutige ID zur Identifizierung des Benutzers. |
Vorname | Der Vorname des Benutzers. |
Zweiter Vorname | Der zweite Vorname des Benutzers. |
Nachname | Der Nachname des Benutzers. |
Mobil | Die Mobiltelefonnummer des Benutzers. Es kann für Anmelde- und Registrierungszwecke verwendet werden. |
Die E-Mail des Benutzers. Es kann für Anmelde- und Registrierungszwecke verwendet werden. | |
Passwort-Hash | Der vom entsprechenden Algorithmus generierte Passwort-Hash. Wir müssen vermeiden, einfache Passwörter zu speichern. |
Registriert unter | Diese Spalte kann verwendet werden, um die Lebensdauer des Benutzers mit der Anwendung zu berechnen. |
Letzte Anmeldung | Es kann verwendet werden, um die letzte Anmeldung des Benutzers zu identifizieren. |
Einführung | Die kurze Einführung des Benutzers. |
Profil | Die Benutzerdetails. |
Die Benutzertabelle mit den entsprechenden Einschränkungen sieht unten aus.
CREATE TABLE `rbac`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );
Rollentabelle
In diesem Abschnitt entwerfen wir die Rollentabelle zum Speichern der Systemrollen. Unten erwähnt ist die Beschreibung aller Spalten der Rollentabelle.
ID | Die eindeutige ID zur Identifizierung der Rolle. |
Titel | Der Rollentitel. |
Schnecke | Der eindeutige Slug, um die Rolle zu durchsuchen. |
Beschreibung | Die Beschreibung zur Erwähnung der Rolle. |
Aktiv | Das Flag, um zu prüfen, ob die Rolle derzeit aktiv ist. |
Erstellt am | Es speichert Datum und Uhrzeit der Erstellung der Rolle. |
Aktualisiert um | Es speichert Datum und Uhrzeit der Aktualisierung der Rolle. |
Inhalt | Die vollständigen Details über die Rolle. |
Die Rollentabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
CREATE TABLE `rbac`.`role` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`description` TINYTEXT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC) );
Berechtigungstabelle
In diesem Abschnitt entwerfen wir die Berechtigungstabelle um die Systemberechtigungen zu speichern. Unten erwähnt ist die Beschreibung aller Spalten der Berechtigungstabelle.
ID | Die eindeutige ID zur Identifizierung der Berechtigung. |
Titel | Der Berechtigungstitel. |
Schnecke | Der eindeutige Slug, um die Berechtigung zu durchsuchen. |
Beschreibung | Die Beschreibung zur Erwähnung der Berechtigung. |
Aktiv | Das Flag, um zu prüfen, ob die Berechtigung derzeit aktiv ist. |
Erstellt am | Datum und Uhrzeit der Erstellung der Berechtigung werden gespeichert. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung der Berechtigung werden gespeichert. |
Inhalt | Die vollständigen Details zur Berechtigung. |
Die Berechtigungstabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
CREATE TABLE `rbac`.`permission` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`description` TINYTEXT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC) );
Rollenberechtigungstabelle
Die Rollenberechtigungstabelle können verwendet werden, um die Zuordnungen der Berechtigungen zu den Rollen zu speichern. Nachfolgend finden Sie die Beschreibung aller Spalten der Rollenberechtigungstabelle.
Rollen-ID | Die Rollen-ID zur Identifizierung der Rolle. |
Berechtigungs-ID | Die Berechtigungs-ID zur Identifizierung der Berechtigung. |
Erstellt am | Datum und Uhrzeit der Erstellung der Zuordnung werden gespeichert. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung der Zuordnung werden gespeichert. |
Die Rollenberechtigungstabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
CREATE TABLE `rbac`.`role_permission` (
`roleId` BIGINT NOT NULL,
`permissionId` BIGINT NOT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL,
PRIMARY KEY (`roleId`, `permissionId`),
INDEX `idx_rp_role` (`roleId` ASC),
INDEX `idx_rp_permission` (`permissionId` ASC),
CONSTRAINT `fk_rp_role`
FOREIGN KEY (`roleId`)
REFERENCES `rbac`.`role` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_rp_permission`
FOREIGN KEY (`permissionId`)
REFERENCES `rbac`.`permission` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Benutzerrolle
Wir können das System einfach halten, indem wir dem Benutzer eine einzige Rolle zuweisen. Die zugewiesene Rolle kann verwendet werden, um die der Rolle zugeordneten Berechtigungen abzurufen. Der Zugriff auf die bestimmte Ressource oder Berechtigung kann überprüft werden, indem die hartcodierte Berechtigung mit der Liste der Berechtigungen verglichen wird, die der dem Benutzer zugewiesenen Rolle zugeordnet sind.
Dies kann mit der unten gezeigten Abfrage erfolgen.
ALTER TABLE `rbac`.`user`
ADD COLUMN `roleId` BIGINT NOT NULL AFTER `id`,
ADD INDEX `idx_user_role` (`roleId` ASC);
ALTER TABLE `rbac`.`user`
ADD CONSTRAINT `fk_user_role`
FOREIGN KEY (`roleId`)
REFERENCES `rbac`.`role` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Erweiterte Optionen
Man kann sich vorstellen, dem Benutzer unter Verwendung der Benutzerrollentabelle mehrere Rollen zuzuweisen. Zu den erweiterten Optionen gehört das Hierarchiesystem zum Gruppieren der Berechtigungen oder Rollen. Diese Optionen verkomplizieren die Abfrage zum Abrufen der Berechtigungsliste weiter und müssen daher durch einen geeigneten Cache-Mechanismus optimiert werden.
Zusammenfassung
In diesem Tutorial haben wir das Datenbankdesign eines RBAC-Systems besprochen, um bestimmte Anforderungen und Ressourcen zu sichern, indem der Zugriff nur gewährt wird, wenn der Benutzer über die entsprechende Berechtigung verfügt.
Sie können Ihre Kommentare einreichen, um an der Diskussion teilzunehmen. Sie könnten auch daran interessiert sein, die Datenbank der Blog- und Umfrage-Anwendungen zu entwerfen.
Das vollständige Datenbankschema ist auch auf GitHub verfügbar.