Hier finden sie die Dokumentation zum aufsetzen von ihrem eigenen n8n als auch dem Workflow: https://hedgedoc.karlkuebelschule.de/j2cr9Z8SSMKfDKq1J4pZNQ --- tags: N8N, Datenschutz, LF10 --- # N8N Datenschutprüfer in einem Formular ## Inhalt - [Docker aufsetzen](#docker-aufsetzen) - [N8N aufsetzen](#n8n-aufsetzen) - [SQL Datenbank aufsetzen](#sql-datenbank-aufsetzen) - [N8N mit der Datenbank verbinden](#n8n-mit-der-datenbank-verbinden) - [N8N Neuer Workflow erstellen](#n8n-neuer-workflow-erstellen) - [Nodes erstellen](#nodes-einfuegen) - [Formular erstellen](#formular-erstellen) - [Datenbank-Anbindung hinzufügen](#datenbank-anbindung-hinzufügen) - [Daten aus der Datenbank holen](#daten-aus-der-datenbank-holen) - [E-Mails versenden](#e-mails-versenden) - [Antworten anzeigen](#antworten-anzeigen) - [Import Beispiel](#import-beispiel) - [Anhang](#anhang) ---

Docker aufsetzen

1. Gehen Sie auf die Docker Webseite https://www.docker.com/ 2. Docker Konto erstellen. 3. Docker Downloaden. 4. Docker Installieren und einrichten.

N8N aufsetzen

1. Öffnen sie die powershell/cmd 2. Kopieren sie diesen Code in powershell/cmd und führen sie ihn aus - Zum Kopieren ``` docker run -e N8N_BASIC_AUTH_ACTIVE=true -e N8N_BASIC_AUTH_USER=admin -e N8N_BASIC_AUTH_PASSWORD=supersecret -e N8N_HOST=0.0.0.0 --name n8n-container -p 5678:5678 -d n8nio/n8n ``` - Zum Veranschaulichen ``` docker run -e N8N_BASIC_AUTH_ACTIVE=true -e N8N_BASIC_AUTH_USER=admin -e N8N_BASIC_AUTH_PASSWORD=supersecret -e N8N_HOST=0.0.0.0 --name n8n-container -p 5678:5678 -d n8nio/n8n ``` 3. Jetzt haben sie ein Container mit N8N angelegt. 4. Sie über localhost und dem Port darauf zugreifen. -> http://localhost:5678 5. Melden sie sich mit ihren Daten die im Code sind an.

MSSQL Datenbank aufsetzen

1. Öffnen sie die cmd/powershell 2. Kopieren sie diesen Code in cmd/powershell und führen sie ihn aus. - Zum Kopieren ``` docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrong!Passw0rd" -p 1433:1433 --name my-mssql-container -d mcr.microsoft.com/mssql/server:2022-latest ``` - Zum Veranschaulichen ``` docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrong!Passw0rd" -p 1433:1433 --name my-mssql-container -d mcr.microsoft.com/mssql/server:2022-latest ``` 3. Jetzt haben sie ein Container mit einer Datenbank angelegt. 4. Laden sie sich MSSQL herunter und Instalieren sie es. https://learn.microsoft.com/de-de/ssms/install/install

Auf Datenbank einrichten

1. Starten sie SQL Server Management Studio 2. Erstellen sie eine neue Verbindung 3. Der Port / Passwort sind die, die Sie bei der einrichtung der Datenbank angegeben haben. 4. **Server Name** = localhost,1433 5. **Authentication** = "SQL Server-Authentifizierung" 6. **Username** = "sa" 7. **Password** = "YourStrong!Passw0rd" 8. **Trust Server Certificate** Checkbox auswählen. 9. Erstellen Sie eine "**neue Abfrage**". 10. Schauen Sie im Anhang 1. "**Datenbank erstellen**". 11. Fügen sie den Code ein und führen sie ihn mit **F5** aus. 12. Damit wurde eine Datenbank namens **N8N** erstellt. 13. Kopieren Sie sich den Zweiten Code im Anhang 2. "**Tabelle erstellen**", fügen ihn ein und Führen Sie ihn aus. 14. Aktualisieren sie die Datenbank Verbindung.

N8N mit der Datenbank verbinden

1. Öffnen sie Powershell 2. Erstellen Sie ein Netzwerk in Docker mit ``docker network create my-network`` 4. Verbinden sie jetzt beide Container. ``docker network connect my-network my-mssql-container`` ``docker network connect my-network n8n-container`` 5. Um die Verbindung zu testen führen sie den unteren Code aus ``docker exec -it n8n-container ping my-mssql-container``

N8N Neuer Workflow erstellen

1. Melden Sie sich in N8N an. 2. Oben links, rechts neben dem N8N-Logo, finden Sie ein **+**-Zeichen. 3. Klicken Sie auf den **+**-Button – nun sollte ein Dropdown mit „Workflow“ erscheinen. 4. Klicken Sie auf **Workflow**, um Ihr neues Board zu erstellen.

Nodes einfügen

1. Klicken sie oben Rechts auf **+** um das Node fenster zu öffnen. 2. Dort können sie eine Vielzahl von Nodes benutzen

Formular erstellen

1. On Form Submission erstellen. Dies ist unser Einstiegspunkt für den Workflow. 2. Titel, Beschreibungen und Felder erstellen 3. Bei "Form URLs" sehen sie die URL zum testen als auch die spätere Production URL unter der das Formular erreichbar ist 4. In einem folgendem Code-Block Eingabedaten als JSON weiter geben an DB

Datenbank-Anbindung hinzufügen

1. Fügen sie die Node "Microsoft SQL" ein. 2. Doppelklick auf die Node und bei "Credential to connect with" auf den Stift um eine Verbindung zu bearbeiten. 3. Geben sie jetzt die gleichen Werte an wie bei der Datenbank verbindung. 4. **Server** = "my-mssql-container" 5. **Database** = "N8N" <- ihre Datenbank die sie Benutzen wollen 6. **User** = "sa" 7. **Password** = "YourStrong!Passw0rd" 8. **Port** = 1433 9. Führen sie Eine Test verbindung durch

Daten aus der Datenbank holen

1. In der Node "**Microsoft SQL**" können sie unten im Query Feld diese Abfrage einfügen. ``SELECT Anwendung, Farbe From Valide Where Anwendung Like '%{{ $json.AnwendungsName }}%'`` 2. Damit bekommen sie von der Datenbank 2 Werte zurück **Anwendungs namen** und die **Farbe**.

Antworten anzeigen

1. Resultierende Daten aus Datenbank mit Switch auswerten, nach Farbe 2. In einzelnen Codeblöcken, für jeden case, zusammenbauen was angezeigt werden soll und was mit E-Mail versand wird 3. Form Node hinzufügen. Type = Form Ending 4. Hier entsprechend anzeigen was wir in den Codeblöcken gebaut haben

E-Mails versenden

1. Send E-Mail Node hinzufügen 2. Credentials erstellen mit welchen E-Mail versendet wird. User, Passwort, Host und Port (Port ist standardmäßig 465) 4. Empfänger/Sender angeben, (Empfänger E-Mail aus vorherigen Nodes) 5. HTML als E-Mail Format auswählen und dort gewünschten HTML Code platzieren, den wir vorher in den Codeblöcken nach dem switch erstellt haben

Import Beispiel

1. Nehmen Sie sich den Code vom Anhang 3. "Import Beispiel" 2. Fügen Sie den Code in einen Editor und Speichern Sie ihn mit der Endung .json 3. Öffnen Sie in einem neuen Workflow 4. Klicken Sie oben rechts auf die drei Punkte und wählen sie den Punkt Import File. 5. Wählen Sie ihre json Datei und jetzt sollten Sie den Workflow haben.

Anhang

Anhang 1: Datenbank erstellen

``` USE [master] GO /****** Object: Database [N8N] Script Date: 31.10.2025 12:14:56 ******/ CREATE DATABASE [N8N] CONTAINMENT = NONE ON PRIMARY ( NAME = N'N8N', FILENAME = N'/var/opt/mssql/data/N8N.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB ) LOG ON ( NAME = N'N8N_log', FILENAME = N'/var/opt/mssql/data/N8N_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB ) WITH CATALOG_COLLATION = DATABASE_DEFAULT GO IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) begin EXEC [N8N].[dbo].[sp_fulltext_database] @action = 'enable' end GO ALTER DATABASE [N8N] SET ANSI_NULL_DEFAULT OFF GO ALTER DATABASE [N8N] SET ANSI_NULLS OFF GO ALTER DATABASE [N8N] SET ANSI_PADDING OFF GO ALTER DATABASE [N8N] SET ANSI_WARNINGS OFF GO ALTER DATABASE [N8N] SET ARITHABORT OFF GO ALTER DATABASE [N8N] SET AUTO_CLOSE OFF GO ALTER DATABASE [N8N] SET AUTO_SHRINK OFF GO ALTER DATABASE [N8N] SET AUTO_UPDATE_STATISTICS ON GO ALTER DATABASE [N8N] SET CURSOR_CLOSE_ON_COMMIT OFF GO ALTER DATABASE [N8N] SET CURSOR_DEFAULT GLOBAL GO ALTER DATABASE [N8N] SET CONCAT_NULL_YIELDS_NULL OFF GO ALTER DATABASE [N8N] SET NUMERIC_ROUNDABORT OFF GO ALTER DATABASE [N8N] SET QUOTED_IDENTIFIER OFF GO ALTER DATABASE [N8N] SET RECURSIVE_TRIGGERS OFF GO ALTER DATABASE [N8N] SET ENABLE_BROKER GO ALTER DATABASE [N8N] SET AUTO_UPDATE_STATISTICS_ASYNC OFF GO ALTER DATABASE [N8N] SET DATE_CORRELATION_OPTIMIZATION OFF GO ALTER DATABASE [N8N] SET TRUSTWORTHY OFF GO ALTER DATABASE [N8N] SET ALLOW_SNAPSHOT_ISOLATION OFF GO ALTER DATABASE [N8N] SET PARAMETERIZATION SIMPLE GO ALTER DATABASE [N8N] SET READ_COMMITTED_SNAPSHOT OFF GO ALTER DATABASE [N8N] SET HONOR_BROKER_PRIORITY OFF GO ALTER DATABASE [N8N] SET RECOVERY FULL GO ALTER DATABASE [N8N] SET MULTI_USER GO ALTER DATABASE [N8N] SET PAGE_VERIFY CHECKSUM GO ALTER DATABASE [N8N] SET DB_CHAINING OFF GO ALTER DATABASE [N8N] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) GO ALTER DATABASE [N8N] SET TARGET_RECOVERY_TIME = 60 SECONDS GO ALTER DATABASE [N8N] SET DELAYED_DURABILITY = DISABLED GO ALTER DATABASE [N8N] SET ACCELERATED_DATABASE_RECOVERY = OFF GO ALTER DATABASE [N8N] SET QUERY_STORE = OFF GO ALTER DATABASE [N8N] SET READ_WRITE GO ```

Anhang 2: Tabelle erstellen

``` USE [N8N] GO /****** Object: Table [dbo].[Valide] Script Date: 31.10.2025 12:13:03 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Valide]( [N8N_ID] [int] IDENTITY(1,1) NOT NULL, [Email] [nvarchar](150) NOT NULL, [Anwendung] [nvarchar](150) NOT NULL, [URLAnwendung] [nvarchar](150) NOT NULL, [Farbe] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Valide] PRIMARY KEY CLUSTERED ( [N8N_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[Valide] ADD CONSTRAINT [DF_Valide_Email] DEFAULT ('') FOR [Email] GO ALTER TABLE [dbo].[Valide] ADD CONSTRAINT [DF_Valide_Anwendung] DEFAULT ('') FOR [Anwendung] GO ALTER TABLE [dbo].[Valide] ADD CONSTRAINT [DF_Valide_URLAnwendung] DEFAULT ('') FOR [URLAnwendung] GO ALTER TABLE [dbo].[Valide] ADD CONSTRAINT [DF_Valide_Farbe] DEFAULT ('') FOR [Farbe] GO ```

Beispiel JSON Projekt Datenschutz

``` { "name": "My workflow", "nodes": [ { "parameters": { "formTitle": "Check URL", "formFields": { "values": [ { "fieldType": "html", "html": "
\n

\n Der Anwendungsname ist der offizielle Name der Software. Sie finden ihn in der Regel in der Anwendung selbst, z. B. unter „Hilfe → Info“, „Über…“ oder im Startbildschirm.\n

\n
\n \n
\n" }, { "fieldLabel": "E-Mail", "fieldType": "email", "requiredField": true }, { "fieldLabel": "Name der Anwendung:", "requiredField": true }, { "fieldLabel": "Version:" } ] }, "options": { "buttonLabel": "Anwendung prüfen", "respondWithOptions": { "values": { "formSubmittedText": "Email wird Versendet!" } } } }, "type": "n8n-nodes-base.formTrigger", "typeVersion": 2.2, "position": [ -336, -192 ], "id": "e11312df-26ab-40f5-879b-5c2c2b498a44", "name": "On form submission", "webhookId": "698b2338-d434-4db5-a064-2da34809c491" }, { "parameters": { "assignments": { "assignments": [ { "id": "86b379e5-5ff1-4c49-9620-c03d2023d8cd", "name": "Email", "value": "={{ $json['E-Mail'] }}", "type": "string" }, { "id": "70edd998-30cf-47c0-b1f1-702249bf8ee1", "name": "AnwendungsName", "value": "={{ $json['Name der Anwendung:'] }}", "type": "string" }, { "id": "1d5eae01-b8bf-4a1b-a6e0-3caa00650731", "name": "Version", "value": "={{ $json['Version:'] }}", "type": "string" } ] }, "options": {} }, "type": "n8n-nodes-base.set", "typeVersion": 3.4, "position": [ -112, -192 ], "id": "3b6db320-c332-45cb-a694-d839f8f3a4f4", "name": "Edit Fields" }, { "parameters": { "operation": "executeQuery", "query": "SELECT Anwendung, Farbe From Valide Where Anwendung Like '%{{ $json.AnwendungsName }}%'" }, "type": "n8n-nodes-base.microsoftSql", "typeVersion": 1.1, "position": [ 96, -192 ], "id": "ceec887d-88da-42c9-947d-3225ef4c761c", "name": "Microsoft SQL1", "credentials": { "microsoftSql": { "id": "djdfLzBSpOyGbd5J", "name": "Microsoft SQL account" } } }, { "parameters": { "fromEmail": "testschulen8n@gmail.com", "toEmail": "={{ $('On form submission').item.json['E-Mail'] }}", "subject": "Datenschutz Prüfung", "html": "={{ $json.html }}", "options": {} }, "type": "n8n-nodes-base.emailSend", "typeVersion": 2.1, "position": [ 1088, -160 ], "id": "ccb3f806-3c1c-407d-b60c-e2f14dfe7deb", "name": "Send email", "webhookId": "24c30897-71b1-46b6-a704-ef008f4277aa", "credentials": { "smtp": { "id": "QV9RLh6CctQW2oah", "name": "SMTP account" } } }, { "parameters": { "jsCode": "return [\n {\n json: {\n html: `\n \n\n\n\n \n \n Einfach Ampel\n\n\n \n
\n \n
\n \n
\n \n
\n \n
\n \n \n

URL: Hier klicken

\n\n\n \n

Info 1: Gelb, es gibt zwar noch kritische Punkte, die Aufmerksamkeit erfordern

\n\n\n\n \n `\n }\n }\n];\n" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 704, -192 ], "id": "223639a8-af29-4bf6-951b-19257b8fdf0f", "name": "Code2" }, { "parameters": { "jsCode": "return [\n {\n json: {\n html: `\n\n\n\n \n \n Einfach Ampel\n\n\n \n
\n \n
\n \n
\n \n
\n \n
\n \n

URL: Hier klicken

\n\n \n

Info 1: Rot, die Datenschutzbestimmungen wurden aufgrund von Problemen nicht akzeptiert

\n\n\n\n `\n }\n }\n];\n" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 704, -336 ], "id": "8409a40b-605b-4823-b690-829ac0ad837a", "name": "Code3" }, { "parameters": { "jsCode": "return [\n {\n json: {\n html: `\n\n\n\n \n \n Einfach Ampel\n\n\n \n
\n \n
\n \n
\n \n
\n \n
\n \n \n

URL: Hier klicken

\n\n \n

Info 1: Grün, alle Datenschutzanforderungen sind erfüllt und keine Probleme bestehen.\n\n\n\n `\n }\n }\n];\n" }, "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 704, -32 ], "id": "fe73c875-2da6-4398-b9e7-ab1ffd9c7d04", "name": "Code4" }, { "parameters": { "rules": { "values": [ { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 }, "conditions": [ { "leftValue": "={{ $json.Farbe }}", "rightValue": "green", "operator": { "type": "string", "operation": "equals" }, "id": "e407db7e-c62f-446f-b050-a2da0cf47164" } ], "combinator": "and" } }, { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 }, "conditions": [ { "id": "bec012ef-ea1f-4eb7-86fc-cb0bd6c24ae3", "leftValue": "={{ $json.Farbe }}", "rightValue": "yellow", "operator": { "type": "string", "operation": "equals", "name": "filter.operator.equals" } } ], "combinator": "and" } }, { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 }, "conditions": [ { "id": "57bf0a44-0930-4ec4-bb7e-46ac02c8472f", "leftValue": "={{ $json.Farbe }}", "rightValue": "red", "operator": { "type": "string", "operation": "equals", "name": "filter.operator.equals" } } ], "combinator": "and" } }, { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict", "version": 2 }, "conditions": [ { "id": "eed6d263-ae94-48ce-a996-bece887855c8", "leftValue": "={{ $json.Farbe }}", "rightValue": "unbekannt", "operator": { "type": "string", "operation": "equals", "name": "filter.operator.equals" } } ], "combinator": "and" } } ] }, "options": {} }, "type": "n8n-nodes-base.switch", "typeVersion": 3.2, "position": [ 368, -224 ], "id": "3b48bcf7-dd8c-4328-8417-408b8c43d3b3", "name": "Switch" } ], "pinData": {}, "connections": { "On form submission": { "main": [ [ { "node": "Edit Fields", "type": "main", "index": 0 } ] ] }, "Edit Fields": { "main": [ [ { "node": "Microsoft SQL1", "type": "main", "index": 0 } ] ] }, "Microsoft SQL1": { "main": [ [ { "node": "Switch", "type": "main", "index": 0 } ] ] }, "Switch": { "main": [ [ { "node": "Code4", "type": "main", "index": 0 } ], [ { "node": "Code2", "type": "main", "index": 0 } ], [ { "node": "Code3", "type": "main", "index": 0 } ], [] ] }, "Code3": { "main": [ [ { "node": "Send email", "type": "main", "index": 0 } ] ] }, "Code2": { "main": [ [ { "node": "Send email", "type": "main", "index": 0 } ] ] }, "Code4": { "main": [ [ { "node": "Send email", "type": "main", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1" }, "versionId": "cefe6a6c-40e1-4f1e-bc94-4821c80410bb", "meta": { "templateCredsSetupCompleted": true, "instanceId": "b7269067285ce522731ca81186ba09707a0ea125a4dea42e18c518a85012a790" }, "id": "uBtwr3o5oN3RflKc", "tags": [] } ```