Datenschutzerklärung
Stand: November 2026
Inhalt- 16 Abschnitte
- 01.Verantwortlicher
- 02.Geltungsbereich
- 03.Erhobene personenbezogene Daten
- 04.Zwecke und Rechtsgrundlagen
- 05.Speicherdauer und Löschung
- 06.Hosting und Infrastruktur
- 07.E-Mail-Versand (Passwort-Reset)
- 08.Sessions, JWT-Tokens und Cookies
- 09.Datenbankverbindungsprofile
- 10.Aktivitäts-Protokoll (optional je Projekt) und Verwaltungs-Einträge
- 11.Weitergabe an Dritte
- 12.Keine Drittland-Übermittlung
- 13.Datensicherheit
- 14.Rechte der betroffenen Personen
- 15.Beschwerderecht
- 16.Änderungen
1. Verantwortlicher
Verantwortlicher im Sinne der Datenschutz-Grundverordnung (DSGVO) ist:
Marcus BelzRheintalbahnstraße 17
68753 Waghäusel
Deutschland
Telefon: +49 1577 3456535
E-Mail: di2@marcus-belz.de
2. Geltungsbereich
Diese Datenschutzerklärung gilt für die Webanwendung DI² - einen ETL-Generator für Datenbankteams. Die Anwendung ist ausschließlich für eingeladene Mitglieder zugänglich. Eine öffentliche Registrierung ist nicht möglich.
3. Erhobene personenbezogene Daten
3.1 Kontodaten
Bei der Anlage eines Nutzerkontos (ausschließlich durch Administratoren) werden folgende Daten gespeichert:
| Datenkategorie | Details |
|---|---|
| E-Mail-Adresse | Eindeutiger Identifikator und Kommunikationskanal |
| Name | Anzeigename innerhalb der Anwendung |
| Authentifizierungsdaten | Verwaltet durch Keycloak Identity Provider (kein Passwort-Hash in der App-Datenbank) |
| Kontostatus | Aktiv / Deaktiviert |
| Erstellungszeitpunkt | Datum der Kontoanlage |
Beim ersten Login eines Nutzers wird in der App-Datenbank zusätzlich ein technischer Schatten-Eintrag angelegt, der die Keycloak-User-ID, die E-Mail-Adresse und den Anzeigenamen als Cache hält. Dieser Cache erlaubt Anzeigen wie „Erstellt von Max Mustermann“ ohne ständige Rückfragen beim Identity-Provider. Sobald ein Nutzer in Keycloak gelöscht wird, werden E-Mail und Name in der App-Datenbank automatisch entfernt (DSGVO Art. 17 - Recht auf Vergessenwerden); nur die technische Referenz bleibt erhalten, damit historische Audit-Einträge weiterhin nachvollziehbar bleiben (anonymisiert als „Gelöschtes Konto“). Das gilt auch für Angaben wie „erstellt von“, „geändert von“ oder „abgenommen von“ an Projekten, Verbindungen und Tabellen. Ausgenommen sind die unveränderlichen Protokolle: in der Abnahme-Historie und der Mitglieder-Historie bleibt die E-Mail-Adresse als Verweis gespeichert und wird als „Gelöschtes Konto“ angezeigt; im Aktivitäts-Protokoll bleibt das Konto erkennbar, bis die Einträge nach 90 Tagen gelöscht werden (Abschnitt 10).
3.2 Technische Zugriffsdaten (Brute-Force-Schutz)
Der Schutz vor Brute-Force-Angriffen wird vollständig durch Keycloak als Identity Provider übernommen. Keycloak speichert dabei intern fehlgeschlagene Anmeldeversuche und sperrt Konten temporär nach wiederholten Fehlversuchen. Diese Daten werden ausschließlich im Keycloak-Backend (PostgreSQL-Datenbank) verarbeitet und nicht an die Anwendung weitergegeben.
3.3 Datenbankverbindungsprofile
Nutzer können Verbindungsprofile zu externen Quelldatenbanken anlegen. Diese enthalten:
| Datenkategorie | Details |
|---|---|
| Verbindungsname | Frei wählbare Bezeichnung |
| Hostname / IP | Adresse des Datenbankservers |
| Port | Netzwerk-Port |
| Datenbankname | Name der Quelldatenbank |
| Benutzername | Datenbanknutzer |
| Passwort | Verschlüsselt gespeichert |
| Datenbanktyp | MSSQL oder PostgreSQL |
3.4 Generierte SQL-Scripts
Die von der Anwendung erzeugten DDL-Statements und SQL-Prozeduren werden nutzerbezogen gespeichert, um eine Script-Historie zu ermöglichen.
3.5 Abnahme-Notizen und Abnahme-Historie
Wer als Projekt-Owner eine Tabelle oder Datenbank abnimmt, kann eine Notiz hinzufügen; wer eine Abnahme zurückzieht, gibt eine Begründung an. Zum letzten Stand speichert die Anwendung am Objekt, wer abgenommen bzw. zurückgezogen hat (E-Mail-Adresse), wann und den Text. Ist die Abnahme-Historie des Projekts eingeschaltet (Vorgabe), hält sie zusätzlich jeden dieser Vorgänge fest: die Art (abgenommen, zurückgezogen, entfallen), den Zeitpunkt, einen Verweis auf das Konto und die Notiz bzw. Begründung. Alle Mitglieder des Projekts können den letzten Stand und die Historie lesen; Einträge lassen sich nicht ändern.
Notiz und Begründung sind Freitext und können personenbezogene Angaben enthalten - verantwortlich für den Inhalt ist, wer sie schreibt; der Eingabedialog weist darauf hin, dass der Text für alle Mitglieder des Projekts sichtbar ist. Ein Projekt-Owner kann die Historie in den Projekt-Einstellungen ausschalten; danach entstehen keine neuen Einträge. Die Historie speichert keine Namen, sondern einen Verweis auf das Konto: wird ein Konto gelöscht, erscheinen seine Einträge - wie der letzte Stand am Objekt - als „Gelöschtes Konto“.
4. Zwecke und Rechtsgrundlagen der Verarbeitung
| Verarbeitungszweck | Daten | Rechtsgrundlage |
|---|---|---|
| Authentifizierung und Zugriffskontrolle | E-Mail, Passwort-Hash, Kontostatus | Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung) |
| Session-Verwaltung | JWT-Token, Nutzer-ID | Art. 6 Abs. 1 lit. b DSGVO |
| Schutz vor Brute-Force-Angriffen | IP-Adresse (temporär) | Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse: IT-Sicherheit) |
| Speicherung von Verbindungsprofilen | Verbindungsdaten inkl. Passwort | Art. 6 Abs. 1 lit. b DSGVO |
| Script-Historie | Generierte SQL-Scripts, Nutzer-ID | Art. 6 Abs. 1 lit. b DSGVO |
| Nutzerverwaltung durch Admins | Alle Kontodaten | Art. 6 Abs. 1 lit. b DSGVO |
5. Speicherdauer und Löschung
| Datenkategorie | Speicherdauer |
|---|---|
| Kontodaten (aktive Konten) | Für die Dauer der Nutzung der Anwendung |
| Kontodaten (deaktivierte Konten) | Bis zur manuellen Löschung durch Administrator |
| JWT-Session-Token | 8 Stunden (automatisch ungültig) |
| IP-Adressen (Rate-Limiting) | Max. 60 Sekunden (Arbeitsspeicher) |
| Server-Protokolle der Anwendung (Zeitpunkt, Vorgang, E-Mail-Adresse des Kontos, technische Fehlerangaben samt Browser-Kennung - keine Passwörter, keine Zugangsdaten) | 30 Tage, danach automatisch gelöscht |
| Datenbankverbindungsprofile | Bis zur manuellen Löschung durch den Nutzer |
| Generierte SQL-Scripts | Bis zur manuellen Löschung durch den Nutzer oder Administrator |
| Abnahme-Notizen und Abnahme-Historie | Keine feste Frist; gelöscht mit der Tabelle (Deaktivieren), der Verbindung oder dem Projekt. Nach Löschung eines Kontos bleiben seine Einträge ohne Namen („Gelöschtes Konto“). |
6. Hosting und Infrastruktur
6.1 Hetzner Cloud (Anwendungsserver und Datenbank)
Die Anwendung wird auf einem Hetzner Cloud VPS betrieben. Hetzner Online GmbH ist ein deutsches Unternehmen mit Rechenzentren in Deutschland und Finnland (EU/EWR).
Hetzner Online GmbHIndustriestr. 25, 91710 Gunzenhausen, Deutschland
Datenschutz: hetzner.com/legal/privacy-policy
Alle personenbezogenen Daten werden ausschließlich auf Hetzner-Servern in der EU verarbeitet und gespeichert. Mit Hetzner besteht ein Auftragsverarbeitungsvertrag (AVV) gemäß Art. 28 DSGVO.
Eingesetzte Hetzner-Dienste:
- Hetzner Cloud VPS - Anwendungsserver (Next.js, Nginx als Reverse Proxy)
- PostgreSQL - Selbst gehostete Datenbank auf dem VPS
6.2 SSL/TLS-Verschlüsselung
Die Datenübertragung zwischen Browser und Server ist durch SSL/TLS verschlüsselt. Das Zertifikat wird kostenfrei über Let's Encrypt (Internet Security Research Group) ausgestellt. Let's Encrypt verarbeitet dabei ausschließlich den Domainnamen, keine personenbezogenen Daten der Nutzer.
6.3 DNS und Domain
Die Domainverwaltung erfolgt über All-Inkl.COM (new media GmbH, Deutschland). All-Inkl verwaltet ausschließlich DNS-Einträge und hat keinen Zugriff auf Anwendungsdaten.
new media GmbHHauptstraße 68, 02742 Friedersdorf, Deutschland
7. E-Mail-Versand (Passwort-Reset)
Ein automatischer E-Mail-Versand (z. B. für Passwort-Reset) ist in der aktuellen Version der Anwendung noch nicht implementiert. Passwörter werden ausschließlich manuell durch Administratoren zurückgesetzt.
8. Sessions, JWT-Tokens und Cookies
Nach der Anmeldung wird ein JSON Web Token (JWT) ausgestellt, das deine Sitzung repräsentiert. Dieses Token:
- hat eine Gültigkeitsdauer von 8 Stunden
- wird in deinem Browser als
HTTP-onlyCookie gespeichert - enthält ausschließlich: Nutzer-ID, E-Mail, Name
- wird nach Ablauf automatisch ungültig und erfordert eine erneute Anmeldung
Zusätzlich werden folgende Cookies für reine UI-Präferenzen gesetzt:
sidebar_state- speichert ausschließlich, ob die Navigations-Sidebar auf- oder zugeklappt ist. Lebensdauer: 7 Tage. Kein personenbezogener Inhalt, kein Tracking, kein Drittanbieter. Technisch notwendig im Sinne § 25 Abs. 2 Nr. 2 TTDSG (Speicherung einer ausdrücklichen Nutzer-Präferenz) und daher ohne Einwilligung zulässig.di2_public_lang- speichert deine gewählte Website-Sprache („de“ oder „en“), damit sich die Seite deine Sprachwahl beim nächsten Besuch merkt. Lebensdauer: 12 Monate. Kein personenbezogener Inhalt, kein Tracking, kein Drittanbieter. Technisch notwendig im Sinne § 25 Abs. 2 Nr. 2 TTDSG (Speicherung einer ausdrücklichen, nutzer-initiierten Präferenz) und daher ohne Einwilligung zulässig - kein Cookie-Banner erforderlich.
Es werden keine dauerhaften Tracking-Cookies oder Third-Party-Cookies eingesetzt.
9. Datenbankverbindungsprofile
Verbindungsprofile zu externen Datenbanken enthalten technische Zugangsdaten zu den Quelldatenbanken (Hostname, Port, Datenbankname, Benutzername, Passwort). Diese Daten:
- werden ausschließlich für die Herstellung von Datenbankverbindungen im Rahmen der ETL-Generierung verwendet
- werden verschlüsselt in der PostgreSQL-Datenbank auf dem Hetzner-Server gespeichert
- sind nur dir und Administratoren zugänglich (Row Level Security)
- werden nicht an Dritte weitergegeben
10. Aktivitäts-Protokoll (optional je Projekt) und Verwaltungs-Einträge
Jedes Projekt kann ein Aktivitäts-Protokoll führen. Es ist standardmäßig ausgeschaltet und wird nur von einem Projekt-Owner nach einer ausdrücklichen Bestätigung eingeschaltet, die nennt, was aufgezeichnet wird, wer es lesen kann, wie lange es bleibt und was nie aufgezeichnet wird. Der Owner informiert das Team; in einem Unternehmen kann ein solches Protokoll mitbestimmungspflichtig sein.
Zweck
Nachvollziehbarkeit gemeinsamer Arbeit: Mitglieder können nachlesen, wer wann was im Projekt geändert hat (z. B. eine Tabelle deaktiviert, eine Prüfregel gelöscht, einen Lade-Typ umgestellt). Die Admins der Anwendung können die Einträge aller Projekte mit eingeschaltetem Protokoll an einer Stelle nachlesen. Das Protokoll dient nicht der Leistungs- oder Verhaltenskontrolle.
Erhobene Daten
- Zeitpunkt der Aktion (Server-Zeit)
- Auslösendes Konto: E-Mail-Adresse und Anzeigename zum Zeitpunkt der Aktion
- Bereich und Vorgang (z. B. „Tabellen · deaktiviert“) sowie der Ausgang (erfolgreich / teilweise / fehlgeschlagen / abgewiesen mit einem Grund-Code)
- Bezeichner der betroffenen Objekte (Namen von Connection, Tabelle, Spalte, Regel und Fremdschlüssel), Zähler und der gesetzte Wert (z. B. ein Status oder eine Rolle)
Nie aufgezeichnet werden (Whitelist-Prinzip - nur ausdrücklich erlaubte Felder werden gespeichert): Passwörter und Verbindungsgeheimnisse, Verbindungs-Zeichenketten, Inhalte von Kommentar- und Notiz-Feldern, Werte von Prüfregel-Parametern über den Regel-Typ hinaus und der Wortlaut von Fehlermeldungen des Datenbank-Treibers.
Empfänger, Speicherdauer, Rechtsgrundlage
- Lesbar für die Mitglieder des jeweiligen Projekts (durch Row Level Security in der Datenbank begrenzt) und für die Admins der Anwendung (über eine Übersicht, die nur Konten mit Admin-Rolle öffnen können); kein Eintrag kann manuell geändert oder gelöscht werden - von niemandem, auch nicht von einem Owner oder Admin.
- Einträge werden 90 Tage nach der Aktion automatisch und endgültig gelöscht - unabhängig davon, ob das Protokoll ein- oder ausgeschaltet ist. Ausschalten stoppt die Aufzeichnung; der Restbestand ist bis zum Ablauf ausgeblendet. Es gibt keinen Export.
- Ein Konto, das das Projekt verlässt oder gelöscht wird, bleibt in seinen Einträgen über den Anzeigenamen zum Zeitpunkt der Aktion (bzw. als ehemaliges Mitglied) erkennbar, bis sie ablaufen.
- Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO - berechtigtes Interesse des Projekt-Teams an der Nachvollziehbarkeit gemeinsamer Änderungen; der Schalter ist eine bewusste Entscheidung des Projekt-Owners. Speicherung auf dem eigenen Server in Deutschland, kein Auftragsverarbeiter, kein Drittland, keine Cookies.
Verwaltungs-Einträge (immer geführt)
Unabhängig vom Projekt-Schalter hält die Anwendung fest, wer Konten verwaltet (einladen, Einladung erneut senden, aktivieren, deaktivieren, Rolle ändern, Profil ändern, löschen) und wer Projekte anlegt, dupliziert oder löscht - mit Konto, Zeitpunkt, Vorgang, dem betroffenen Konto bzw. dem Projektnamen und dem Ausgang. Zweck: eine nachvollziehbare und gegen unberechtigte Änderungen geschützte Verwaltung. Empfänger: ausschließlich die Admins der Anwendung. Speicherdauer: 90 Tage, danach automatische und endgültige Löschung. Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse an einer nachvollziehbaren Verwaltung). Nicht festgehalten werden Passwörter, Einladungs-Links und Fehlertexte des Anmeldedienstes.
11. Weitergabe an Dritte
Personenbezogene Daten werden nicht an Dritte verkauft oder zu Werbezwecken weitergegeben. Eine Weitergabe erfolgt ausschließlich:
- An Hetzner Online GmbH im Rahmen des Hostingvertrags (AVV vorhanden)
- Bei gesetzlicher Verpflichtung (z. B. behördliche Anfragen)
12. Keine Drittland-Übermittlung
Alle personenbezogenen Daten werden ausschließlich auf Servern innerhalb der Europäischen Union (EU) bzw. des Europäischen Wirtschaftsraums (EWR) verarbeitet und gespeichert. Es findet keine Übermittlung personenbezogener Daten in Drittländer statt.
Auch sämtliche statischen Assets - Schriftarten (Inter, JetBrains Mono), Icons, Logos und JavaScript-Bundles - werden direkt vom Hetzner-Server in Falkenstein ausgeliefert. Es werden insbesondere keine Schriftarten von Google Fonts oder vergleichbaren Drittanbieter-CDNs nachgeladen, sodass beim Aufruf der Seite keine IP-Adresse oder andere Verbindungsdaten an US-Server übermittelt werden (relevant im Kontext LG München I, Urteil v. 20.01.2022, Az. 3 O 17493/20 zu Google Fonts).
13. Datensicherheit
| Maßnahme | Umsetzung |
|---|---|
| Transportverschlüsselung | TLS 1.2/1.3 via Nginx + Let's Encrypt |
| Passwortsicherheit | Passwortverwaltung durch Keycloak Identity Provider (kein Passwort-Hash in der App-Datenbank) |
| Brute-Force-Schutz | Keycloak-integrierter Schutz (temporäre Kontosperrung nach Fehlversuchen) |
| Datenbankzugriffsschutz | Row Level Security (RLS) in PostgreSQL |
| Session-Sicherheit | JWT mit 8h Ablauf, HTTP-only Cookies |
| Zugriffskontrolle | Rollenbasiert (Nutzer / Administrator) via Keycloak Realm-Rollen |
| Netzwerksicherheit | Nginx Reverse Proxy, kein direkter DB-Zugriff von außen |
14. Deine Rechte
Als betroffene Person stehen dir gemäß DSGVO folgende Rechte zu:
- Auskunft (Art. 15) - Welche Daten sind über dich gespeichert?
- Berichtigung (Art. 16) - Unrichtige Daten korrigieren lassen
- Löschung (Art. 17) - Deine Daten löschen lassen, sofern keine Aufbewahrungspflicht besteht
- Einschränkung (Art. 18) - Verarbeitung deiner Daten einschränken lassen
- Datenübertragbarkeit (Art. 20) - Deine Daten in maschinenlesbarem Format erhalten
- Widerspruch (Art. 21) - Widerspruch gegen Verarbeitung auf Basis berechtigter Interessen einlegen
Kontakt zur Ausübung deiner Rechte: di2@marcus-belz.de
15. Beschwerderecht
Du hast das Recht, dich bei der zuständigen Datenschutz-Aufsichtsbehörde zu beschweren:
Der Landesbeauftragte für den Datenschutz und die Informationsfreiheit Baden-Württemberg (LfDI BW)Königstraße 10a, 70173 Stuttgart
poststelle@lfdi.bwl.de
www.baden-wuerttemberg.datenschutz.de
16. Änderungen dieser Datenschutzerklärung
Diese Datenschutzerklärung wird bei Änderungen der Anwendung oder der Rechtslage aktualisiert. Insbesondere wird Abschnitt 7 (E-Mail-Versand) ergänzt, sobald ein Passwort-Reset per E-Mail implementiert wird.