Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie kann ich von C# auf MySQL Zugreifen ohne die Zugangsdaten hart im Code zu speichern?
Lucius
myCSharp.de - Member



Dabei seit:
Beiträge: 18
Herkunft: Düsseldorf

Themenstarter:

Wie kann ich von C# auf MySQL Zugreifen ohne die Zugangsdaten hart im Code zu speichern?

beantworten | zitieren | melden

Hallo, ich bin noch neu und hoffe in Zukunft hier einiges lernen zu können.

Ich habe mal früher viel in VB programmiert und wollte unbedingt in C# umlernen.
Mein Problem ist, das einiges aus der Zeit VB her ist und durch bestimmte Versionswechsel von PHP dazu geführt haben das alte PHP Files nicht mehr so funktionieren.

Eigentlich ist mir persönlich nur Wichtig, das ich von C# aus, eine Datenbank entweder abrufen oder ändern sowie Löschen kann. Zusätzlich möchte ich ein kleines Login darüber schreiben.

Ich habe einiges zwar darüber gefunden, nur leider werden ständig die Zugangsdaten der Mysql Datenbank in das C# Programm eingetragen, ich hatte das früher so, das ich eine PHP Datei hatte und in dieser der größte teil des MYSQLI stand und nur mit dem Programm abgeglichen werden musste.

Die Verbindung wurde über PHP durchgeführt und nicht durch das Programm. Jetzt bin ich hier nach einer Lösung, ob jemand ein Snippet kennt, das diese Möglichkeiten mitbringt?

lg Lucius
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15706
Herkunft: BW

beantworten | zitieren | melden

Du kannst mit C# direkt auf MySQL zugreifen (über ADO.NET und dem entsprechend offiziellen MySQL Driver).
Du kannst aber von C# auf PHP auf MySQL zugreifen; das ist ein doppelter Technologiebruch.

Du kannst aber mit PHP Daten aus MySQL laden, diese über ein REST-Schnittstelle zur Verfügung stellen und das dann von C# aus aufrufen.

Nen Snippet dazu werde ich Dir aber nicht raus suchen; das kannste ja mit den Stichworten selbst. Bin sicher, dass Du alt und eigenständig genug dazu bist ;-)

Das Vorhaben ist aber insgesamt - zumindest die Erklärung - kurios.
Wenn möglich würde ich PHP einfach aus dem Spiel lassen und direkt mit C# auf MySQL zugreifen.
Google-Suche nach c# mysql
private Nachricht | Beiträge des Benutzers
Lucius
myCSharp.de - Member



Dabei seit:
Beiträge: 18
Herkunft: Düsseldorf

Themenstarter:

beantworten | zitieren | melden

Danke dir für deine Antwort :)

Mir ist es nur wichtig, das die Zugangsdaten der MYSQL Datenbank nicht im Programmcode gespeichert werden. Und das kann Ado.net?
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 511
Herkunft: Münster

beantworten | zitieren | melden

Das kannst Du selber steuern.
private Nachricht | Beiträge des Benutzers
Lucius
myCSharp.de - Member



Dabei seit:
Beiträge: 18
Herkunft: Düsseldorf

Themenstarter:

beantworten | zitieren | melden

Hmm, ich finde irgendwie nicht das richtige dazu?
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 511
Herkunft: Münster

beantworten | zitieren | melden

Auf der MySQL-Seite gibt's entsprechende Beispiele
private Nachricht | Beiträge des Benutzers
M.L.
myCSharp.de - Member



Dabei seit:
Beiträge: 250

beantworten | zitieren | melden

Die Logindaten lassen sich auch in eine externe .cs Datei eintragen (analog wie .inc bei PHP): Beispiel bei 07planning
Goalkicker.com
DNC Magazine for .NET Developers,
Software is like cathedrals: first we build them, then we pray ;-)
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 511
Herkunft: Münster

beantworten | zitieren | melden

Speicher die Datenbankzugangsdaten (verschlüsselt) in einer Konfigurationsdatei (dafür bietet .NET auch schon entsprechende Klassen).
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 355
Herkunft: Kassel

beantworten | zitieren | melden

Entschuldigt, dass ich soviel Quote, ich wollte das aber nicht unkommentiert stehen lassen.
Zitat von M.L.
Die Logindaten lassen sich auch in eine externe .cs Datei eintragen (analog wie .inc bei PHP)
Das ist nicht analog wie bei PHP.
Der Unterschied: c# wird kompiliert und alle *.cs Dateien innerhalb eines Projektes als IL Code in einer .dll (oder .exe oder bin) zusammengefasst.
In der analogie zu PHP wäre hier eine Konfigurationsdatei, die vom Code gelesen wird (analog zu require_once in PHP). Prinzipiell sind die Vergleiche aber etwas mühsam, weil PHP und C# sehr unterschiedlich funktionieren!

Zitat von hypersurf
(dafür bietet .NET auch schon entsprechende Klassen).
Ich würde in jedem Fall das Konfigurationsmodell von .NET Core empfehlen: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1
Das ermöglicht sowohl verschlüsselte Quellen für Zugangsdaten, Authentifizierte und Lokale. Damit hat man die beste Flexibilität.
Das funktioniert auch für Desktop (WPF/WinForms) Apps. Allerdings führt das quasi jeden Login Mechanismus ad absurdum, wenn nicht der Login der gleiche wie für die Datenbank ist.
Auch muss immer Hinterfragt werden, ob ein Desktop Programm direkt auf eine Datenbank zugreifen sollte!

@Lucius:
Am besten wäre es, du arbeitest dich in die Grundlagen von der nicht mehr ganz so neuen C# Welt in Form von .NET Core (bzw. jetzt kommend .NET 5) ein.
Da werden viele dieser Frage mit gut funktionierenden Konzepten beantwortet.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15706
Herkunft: BW

beantworten | zitieren | melden

Zitat von M.L.
Die Logindaten lassen sich auch in eine externe .cs Datei eintragen (analog wie .inc bei PHP)
Zitat von hypersurf
Speicher die Datenbankzugangsdaten (verschlüsselt) in einer Konfigurationsdatei

Sollte man beides im Jahr 2020 nicht unbedingt mehr tun - übrigens auch nicht in PHP.
Als sicherer gelten hier die Umgebungsvariablen.

Für Webanwendung über die Verwaltung des Webservers.
Für Desktop Anwendungen bei Windows der Windows Credential Manager.
Zitat von Lucius
Hmm, ich finde irgendwie nicht das richtige dazu?

Wenn man die Zeitabstände Deiner Beiträge beachtet und auch Dein Thema Wie teile ich ein Array? dann scheinst Du zum einen offenbar nicht richtig zu suchen oder zu suchen zu wollen, geschweige denn in die Dokumentation zu schauen und zum anderen fehlen Dir die minimalsten Grundlagen.
Und wenn schon der Blick in die Dokumentation für Dich zuviel Arbeit ist....

Beschäftige Dich erst mal damit, wie C# funktioniert.
Ansonsten ist das als ob Du versuchst einen Nagel in die Wand zu schlagen und nicht weißt wie ein Hammer funktioniert.

[FAQ] Wie finde ich den Einstieg in C#?
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 228

beantworten | zitieren | melden

Zitat von Abt
Du kannst mit C# direkt auf MySQL zugreifen (über ADO.NET und dem entsprechend offiziellen MySQL Driver).

Wieso denn ADO.NET?! Sollte man das überhaupt noch verwenden anstelle von EF?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15706
Herkunft: BW

beantworten | zitieren | melden

EF ist nichts anderes als ein ORM und verwendet unter der Haube ADO.NET.
EF hat genug Nachteile als dass man durchaus auch direkt mit ADO.NET arbeiten kann, ohne den EF Überzug.

What is ADO.NET?
Wie Du hier nachgelesen kannst ist ADO.NET quasi die Plattform, die Abstraktion für den Umgang mit verschiedenen Datenquellen in .NET, wobei ADO.NET alle Quellen unterstützt, die dann Provider (aka Driver) für ADO.NET liefern (MSSQL, MySQL, Sqlite...).

Das Problem hier im Thema kann direkt gelöst werden (mit ADO.NET) oder durchaus auch mit ORM wie EF oder Dapper oder....

Zusatz als Edit:
Ich bin ein großer Fan vom EF Core (anders als EF6) - es ist wunderbar zu nutzen.
Aber EF ist kein Allheilmittel und für gewisse Dinge muss man zwingend ADO.NET direkt nutzen, zB Views und Co (was auch über EF Core geht).
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 511
Herkunft: Münster

beantworten | zitieren | melden

Zitat von Abt
Sollte man beides im Jahr 2020 nicht unbedingt mehr tun - übrigens auch nicht in PHP.
Als sicherer gelten hier die Umgebungsvariablen.

Aus Interesse: Warum sind Umgebungsvariablen sicherer?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15706
Herkunft: BW

beantworten | zitieren | melden

Zitat
Aus Interesse: Warum sind Umgebungsvariablen sicherer?
Prinzipiell gilt die Verwaltung von Credentials durch die "Umgebung" als die sicherste Variante.
Für die konkrete Umsetzung zB. einer Desktop App das in der Regel das Betriebssystem und im konkreten Fall von Windows eben der Credential Manager.
Wer mal einen Blick rein wirft der sieht auch, dass quais alle Windows oder auch zB. Microsoft Applikationen (zB Office Suite) aber auch zB. Git hier seine Credentials hinterlegt.

Damit wird sichergestellt, dass der Zugriff nur im Betriebssystem-Kontext (zB angemeldeter Benutzer) möglich ist. Credentials in Dateien kann jeder sehen, der Zugriff auf die Datei hat - egal wo sie liegt.

Basierend auf diesem Mechanismus funktionieren im Prinzip auch alle Enterprise Secret Manager, wie zB Azure KeyVault, Hashicorp Vault, AWS Secret Manager:
Der Zugriff auf den Vault ist nur durch die Managed Identity möglich, wobei die Managed Identity durch die Umgebung (Azure, AWS, Kubernetes Cluster..) erzeugt oder mindestens aktiv verwaltet wird.

Konkretes Beispiel:
Der Zugriff auf Azure KeyVault ist nur von Azure-Services aus möglich; nicht von Deinem PC. Dein PC liegt schließlich nicht in der Hoheit von Azure; der Service hingehen schon.
Eine Managed Identity ist dabei zB. die Webanwendung, sodass auch wirklich nur diese Applikation Zugriff auf zB. Datenbank-Credentials hat.

Konkrete Azure Lekture:
What are managed identities for Azure resources?

Die .NET CLI hat seit längerem schon die Unterstützung von User Secrets während der Entwicklungszeit, sodass man auch gar nicht in die Versuchung kommen muss, irgendwelche Credentials in Dateien zu packen und gar eventuell einzuschecken.

Das funktioniert mit allen Applikationen, die den Microsoft.Extensions.Configurations entsprechend nutzen.
Die Docs hier liegen unter ASP.NET Core, weil es hier besonders wichtig ist, dass eben die Credentials nicht in Dateien liegen Safe storage of app secrets in development in ASP.NET Core
private Nachricht | Beiträge des Benutzers