Privacy Policy
Last updated: July 2026
Contents- 15 sections
- 01.Controller
- 02.Scope
- 03.Personal data collected
- 04.Purposes and legal bases
- 05.Storage period and deletion
- 06.Hosting and infrastructure
- 07.E-mail (password reset)
- 08.Sessions, JWT tokens and cookies
- 09.Database connection profiles
- 10.Disclosure to third parties
- 11.No third-country transfer
- 12.Data security
- 13.Your rights
- 14.Right to lodge a complaint
- 15.Changes
1. Controller
The controller within the meaning of the General Data Protection Regulation (GDPR) is:
Marcus BelzRheintalbahnstraß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 category | Details |
|---|---|
| E-mail address | Unique identifier and communication channel |
| Name | Display name within the application |
| Authentication data | Managed by the Keycloak Identity Provider (no password hash in the app database) |
| Account status | Active / Disabled |
| Creation timestamp | Date 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 category | Details |
|---|---|
| Connection name | Freely chosen label |
| Hostname / IP | Address of the database server |
| Port | Network port |
| Database name | Name of the source database |
| Username | Database user |
| Password | Stored encrypted |
| Database type | MSSQL 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 purpose | Data | Legal basis |
|---|---|---|
| Authentication and access control | E-mail, password hash, account status | Art. 6 (1) (b) GDPR (performance of a contract) |
| Session management | JWT token, user ID | Art. 6 (1) (b) GDPR |
| Protection against brute-force attacks | IP address (temporary) | Art. 6 (1) (f) GDPR (legitimate interest: IT security) |
| Storage of connection profiles | Connection data incl. password | Art. 6 (1) (b) GDPR |
| Script history | Generated SQL scripts, user ID | Art. 6 (1) (b) GDPR |
| User management by admins | All account data | Art. 6 (1) (b) GDPR |
5. Storage period and deletion
| Data category | Storage 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 token | 8 hours (automatically invalid) |
| IP addresses (rate limiting) | Max. 60 seconds (in memory) |
| Database connection profiles | Until manual deletion by the user |
| Generated SQL scripts | Until 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 GmbHIndustriestr. 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 GmbHHauptstraß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.
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-onlycookie - 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
| Measure | Implementation |
|---|---|
| Transport encryption | TLS 1.2/1.3 via Nginx + Let's Encrypt |
| Password security | Password management by Keycloak Identity Provider (no password hash in the app database) |
| Brute-force protection | Keycloak-integrated protection (temporary account lock after failed attempts) |
| Database access protection | Row Level Security (RLS) in PostgreSQL |
| Session security | JWT with 8h expiry, HTTP-only cookies |
| Access control | Role-based (user / administrator) via Keycloak realm roles |
| Network security | Nginx 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.