Skip to main content
Convenience translationThis English version is provided for your convenience only - the German version is legally binding.Zur deutschen Fassung →
Legal

Privacy Policy

Last updated: July 2026

Contents- 15 sections
  1. 01.Controller
  2. 02.Scope
  3. 03.Personal data collected
  4. 04.Purposes and legal bases
  5. 05.Storage period and deletion
  6. 06.Hosting and infrastructure
  7. 07.E-mail (password reset)
  8. 08.Sessions, JWT tokens and cookies
  9. 09.Database connection profiles
  10. 10.Disclosure to third parties
  11. 11.No third-country transfer
  12. 12.Data security
  13. 13.Your rights
  14. 14.Right to lodge a complaint
  15. 15.Changes

1. Controller

The controller within the meaning of the General Data Protection Regulation (GDPR) is:

Marcus Belz
Rheintalbahnstraße 7
68753 Waghäusel
Germany

Phone: +49 1577 3456535
E-mail: di2@marcus-belz.de

2. Scope

This privacy policy applies to the web application DI² - an ETL generator for database teams. The application is accessible exclusively to invited members. Public registration is not possible.

3. Personal data collected

3.1 Account data

When a user account is created (exclusively by administrators), the following data is stored:

Data categoryDetails
E-mail addressUnique identifier and communication channel
NameDisplay name within the application
Authentication dataManaged by the Keycloak Identity Provider (no password hash in the app database)
Account statusActive / Disabled
Creation timestampDate the account was created

On a user's first login, a technical shadow record is additionally created in the app database, caching the Keycloak user ID, e-mail address and display name. This cache enables displays such as “created by Max Mustermann” without constant queries to the identity provider. As soon as a user is deleted in Keycloak, e-mail and name are automatically removed from the app database (GDPR Art. 17 - right to erasure); only the technical reference remains so that historical audit entries stay traceable (anonymised as “deleted user”).

3.2 Technical access data (brute-force protection)

Protection against brute-force attacks is handled entirely by Keycloak as the identity provider. Keycloak internally records failed login attempts and temporarily locks accounts after repeated failures. This data is processed exclusively in the Keycloak backend (PostgreSQL database) and is not passed to the application.

3.3 Database connection profiles

Users can create connection profiles to external source databases. These contain:

Data categoryDetails
Connection nameFreely chosen label
Hostname / IPAddress of the database server
PortNetwork port
Database nameName of the source database
UsernameDatabase user
PasswordStored encrypted
Database typeMSSQL or PostgreSQL

3.4 Generated SQL scripts

The DDL statements and SQL procedures generated by the application are stored per user to enable a script history.

4. Purposes and legal bases of processing

Processing purposeDataLegal basis
Authentication and access controlE-mail, password hash, account statusArt. 6 (1) (b) GDPR (performance of a contract)
Session managementJWT token, user IDArt. 6 (1) (b) GDPR
Protection against brute-force attacksIP address (temporary)Art. 6 (1) (f) GDPR (legitimate interest: IT security)
Storage of connection profilesConnection data incl. passwordArt. 6 (1) (b) GDPR
Script historyGenerated SQL scripts, user IDArt. 6 (1) (b) GDPR
User management by adminsAll account dataArt. 6 (1) (b) GDPR

5. Storage period and deletion

Data categoryStorage period
Account data (active accounts)For the duration of use of the application
Account data (disabled accounts)Until manual deletion by an administrator
JWT session token8 hours (automatically invalid)
IP addresses (rate limiting)Max. 60 seconds (in memory)
Database connection profilesUntil manual deletion by the user
Generated SQL scriptsUntil manual deletion by the user or an administrator

6. Hosting and infrastructure

6.1 Hetzner Cloud (application server and database)

The application runs on a Hetzner Cloud VPS. Hetzner Online GmbH is a German company with data centres in Germany and Finland (EU/EEA).

Hetzner Online GmbH
Industriestr. 25, 91710 Gunzenhausen, Germany
Privacy: hetzner.com/legal/privacy-policy

All personal data is processed and stored exclusively on Hetzner servers in the EU. A data processing agreement (DPA) pursuant to Art. 28 GDPR exists with Hetzner.

Hetzner services used:

  • Hetzner Cloud VPS - application server (Next.js, Nginx as reverse proxy)
  • PostgreSQL - self-hosted database on the VPS

6.2 SSL/TLS encryption

Data transmission between browser and server is encrypted via SSL/TLS. The certificate is issued free of charge via Let's Encrypt (Internet Security Research Group). Let's Encrypt processes only the domain name, no personal data of the users.

6.3 DNS and domain

Domain management is handled via All-Inkl.COM (new media GmbH, Germany). All-Inkl manages DNS records only and has no access to application data.

new media GmbH
Hauptstraße 68, 02742 Friedersdorf, Germany

7. E-mail (password reset)

An automated e-mail dispatch (e.g. for password reset) is not yet implemented in the current version of the application. Passwords are reset exclusively by administrators manually.

As soon as an e-mail service is integrated, this privacy policy will be updated accordingly and the provider used will be named here.

8. Sessions, JWT tokens and cookies

After signing in, a JSON Web Token (JWT) is issued representing your session. This token:

  • has a validity of 8 hours
  • is stored in your browser as an HTTP-only cookie
  • contains only: user ID, e-mail, name
  • becomes invalid automatically after expiry and requires signing in again

In addition, we set the following cookies for pure UI preferences:

  • sidebar_state - stores only whether the navigation sidebar is expanded or collapsed. Lifetime: 7 days. No personal content, no tracking, no third party. Technically necessary within the meaning of § 25 (2) no. 2 TTDSG (storage of an explicit user preference) and therefore permitted without consent.
  • di2_public_lang - stores your chosen website language (“de” or “en”) so that the site remembers your language preference on your next visit. Lifetime: 12 months. No personal content, no tracking, no third party. Technically necessary within the meaning of § 25 (2) no. 2 TTDSG (storage of an explicit, user-initiated preference) and therefore permitted without consent - no cookie banner required.

No persistent tracking cookies or third-party cookies are used.

9. Database connection profiles

Connection profiles to external databases contain technical access credentials to the source databases (hostname, port, database name, username, password). This data:

  • are used exclusively to establish database connections in the context of ETL generation
  • are stored encrypted in the PostgreSQL database on the Hetzner server
  • are accessible only to you and administrators (Row Level Security)
  • are not passed to third parties

10. Disclosure to third parties

Personal data is not sold or passed on for advertising purposes. Disclosure occurs exclusively:

  • To Hetzner Online GmbH within the scope of the hosting contract (DPA in place)
  • In the event of a legal obligation (e.g. official requests)

11. No third-country transfer

All personal data is processed and stored exclusively on servers within the European Union (EU) or the European Economic Area (EEA). No transfer of personal data to third countries takes place.

All static assets - fonts (Inter, JetBrains Mono), icons, logos and JavaScript bundles - are also served directly from the Hetzner server in Falkenstein. In particular, no fonts are loaded from Google Fonts or comparable third-party CDNs, so that no IP address or other connection data is transmitted to US servers when the page is accessed (relevant in the context of Regional Court of Munich I, judgment of 20 January 2022, ref. 3 O 17493/20 on Google Fonts).

12. Data security

MeasureImplementation
Transport encryptionTLS 1.2/1.3 via Nginx + Let's Encrypt
Password securityPassword management by Keycloak Identity Provider (no password hash in the app database)
Brute-force protectionKeycloak-integrated protection (temporary account lock after failed attempts)
Database access protectionRow Level Security (RLS) in PostgreSQL
Session securityJWT with 8h expiry, HTTP-only cookies
Access controlRole-based (user / administrator) via Keycloak realm roles
Network securityNginx reverse proxy, no direct DB access from outside

13. Your rights

As a data subject you have the following rights under the GDPR:

  • Access (Art. 15) - which data is stored about you?
  • Rectification (Art. 16) - have incorrect data corrected
  • Erasure (Art. 17) - have your data deleted, provided there is no retention obligation
  • Restriction (Art. 18) - have the processing of your data restricted
  • Data portability (Art. 20) - receive your data in a machine-readable format
  • Objection (Art. 21) - object to processing based on legitimate interests

Contact to exercise your rights: di2@marcus-belz.de

14. Right to lodge a complaint

You have the right to lodge a complaint with the competent data protection supervisory authority:

The State Commissioner for Data Protection and Freedom of Information Baden-Württemberg (LfDI BW)
Königstraße 10a, 70173 Stuttgart
poststelle@lfdi.bwl.de
www.baden-wuerttemberg.datenschutz.de

15. Changes to this privacy policy

This privacy policy is updated when the application or the legal situation changes. In particular, section 7 (e-mail) will be extended as soon as a password reset by e-mail is implemented.