Laden...

Sichere Verbindung von Applikation zu SQL Server

Erstellt von AnUnknownPerson vor einem Jahr Letzter Beitrag vor einem Jahr 764 Views
A
AnUnknownPerson Themenstarter:in
5 Beiträge seit 2022
vor einem Jahr
Sichere Verbindung von Applikation zu SQL Server

Hallöchen,
Ich suche seit längerem nach einer Lösung aber ich finde einfach nichts oder ich verstehe das Thema mit der sicheren Verbindung nicht. Sagen wir mal ich habe eine C# Winforms application und verbinde mich per connectionstring zum SQL Server. Diese application ist ein Passwortmanager mit Login. Jetzt möchte ich das ganze veröffentlichen. So wo ist jetzt hier die Sicherheit? Im connectionstring stehen ja Datenbankname- Passwort etc. Läuft das über eine Rest API oder doch über eine verschlüsselte app.xml? Oder stehe ich einfach nur komplett auf dem Schlauch?

Danke für die ganzen Antworten in vorraus. Ich Programmiere schon längere Zeit und würde gerne mehr über Sicherheit in diesem Bereich erfahren.

16.806 Beiträge seit 2008
vor einem Jahr

Prinzipiell: gar nicht.

Die bessere Lösung ist immer, dass ein Client sich mit einer HTTP-API verbindet, und diese API mit dem SQL Server kommuniziert. Ob das REST, GraphQL, gRPC oder sonst was ist, ist erst mal sekundär.
Jedenfalls muss durch diese Art a) der Client niemals mit Server Credentials umgehen und b) kann der SQL Server über das Netzwerk so gesichert werden, dass er nur von der HTTP API Anwendung erreichbar ist.

Jeder DB Hersteller sagt Dir nämlich, dass eine Datenbank über ein Netzwerk niemals exposed werden sollte, was bei einer direkten Client-Anwendung aber immer notwendig ist. Cloud-Anbieter haben deswegen bei all ihren Datenbank-Konfigurationen per default es so eingestellt, dass die Datenbank nicht aus dem Internet erreichbar ist - Du musst es bewusst aktivieren.

Des weiteren kann der Client ein völlig anderes Authentifizierungssystem verwenden (zB OpenID + OAuth) als die Verbindung von HTTP API zu SQL Server (Zertifikate, Active Directory..).

Je nachdem was Du für eine Plattform nutzt, kannst Du mit Datenbanken und Backend-Services vollständig ohne Credentials arbeiten.
Azure hat zum Beispiel das Feature von Managed Identities, quasi Passwort-lose Authentifizierung von Azure Services untereinander auf Azure. Geht aber leider nur auf Azure, nicht On Prem und die anderen Cloud-Provider bieten das in diesem Umfang (noch) nicht an (AWS hat den Identity Service, aber der is eher rudimentär).

Authentifizierung bzw. Authorisierung von Benutzern ist niemals Aufgabe der Datenbank.

A
AnUnknownPerson Themenstarter:in
5 Beiträge seit 2022
vor einem Jahr

Hey Danke für die schnelle und tolle Antwort! Falls du ein Beispiel hättest, könntest du ein Link schicken?

16.806 Beiträge seit 2008
vor einem Jahr

Von was? Weiß nicht, was Du meinst.
Hast ja nun viele Infos bekommen, die für eine Recherche-Basis dienen.
Für ne Google Suche bist sicher selbst alt genug 🙂 Ansonsten präzisere Fragen stellen.

2.078 Beiträge seit 2012
vor einem Jahr

Klingt als hättest Du Abts Antwort nicht verstanden 😉

Prinzipiell: gar nicht.

Es gibt kein Beispiel für "gar nicht".
Wenn deine Anwendung aktuell direkt mit der DB telefoniert (deswegen fragst Du ja), dann hast ein Problem.
Um das zu ändern kannst Du nicht mal eben so ein Code-Snippet rein pasten und es läuft sicher(er).

Dein Programm darf nicht mit der DB arbeiten (=SQL, EFCore, etc. mit ConnectionString), Du musst also umdenken und - je nachdem, wie dein Programm aufgebaut ist - auch großflächig umbauen.
Die Möglichkeiten, die Du hast, hat Abt dir genannt, dazu musst Du dich jetzt einlesen und überlegen, was Du brauchst und welche der Möglichkeiten für dich und dein Ziel am besten geeignet ist.

Oder Du lässt es so.
Für privat mag das ausreichen, im professionellen Umfeld sollte man das aber nicht machen - hängt davon ab, was für Daten Du hast.
Wobei es auch Firmen gibt, die das so wollen, obwohl es unsicher ist (weil weniger Arbeit), aber dann ist es nicht mehr dein Bier.