myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Wie kann ich von C# auf MySQL Zugreifen ohne die Zugangsdaten hart im Code zu speichern?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Lucius Lucius ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.09.2020
Beiträge: 14
Herkunft: Düsseldorf


Lucius ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
18.09.2020 18:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.280
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
18.09.2020 18:27 Beiträge des Benutzers | zu Buddylist hinzufügen
Lucius Lucius ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.09.2020
Beiträge: 14
Herkunft: Düsseldorf

Themenstarter Thema begonnen von Lucius

Lucius ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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?
18.09.2020 18:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
hypersurf hypersurf ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.10.2008
Beiträge: 491
Entwicklungsumgebung: VS Studio 2019, Android Studio
Herkunft: Münster


hypersurf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das kannst Du selber steuern.
18.09.2020 19:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Lucius Lucius ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.09.2020
Beiträge: 14
Herkunft: Düsseldorf

Themenstarter Thema begonnen von Lucius

Lucius ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hmm, ich finde irgendwie nicht das richtige dazu?
18.09.2020 19:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
hypersurf hypersurf ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.10.2008
Beiträge: 491
Entwicklungsumgebung: VS Studio 2019, Android Studio
Herkunft: Münster


hypersurf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Auf der MySQL-Seite gibt's entsprechende  Beispiele
18.09.2020 19:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
M.L.
myCSharp.de-Mitglied

Dabei seit: 26.09.2006
Beiträge: 222
Entwicklungsumgebung: VS Community '19


M.L. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die Logindaten lassen sich auch in eine externe .cs Datei eintragen (analog wie .inc bei PHP):  Beispiel bei 07planning
18.09.2020 20:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
hypersurf hypersurf ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.10.2008
Beiträge: 491
Entwicklungsumgebung: VS Studio 2019, Android Studio
Herkunft: Münster


hypersurf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Speicher die Datenbankzugangsdaten (verschlüsselt) in einer Konfigurationsdatei (dafür bietet .NET auch schon entsprechende  Klassen).
18.09.2020 21:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Papst Papst ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.09.2014
Beiträge: 305
Entwicklungsumgebung: VS2017
Herkunft: Kassel


Papst ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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/...=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.
19.09.2020 12:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.280
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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#?
19.09.2020 14:49 Beiträge des Benutzers | zu Buddylist hinzufügen
JimStark
myCSharp.de-Mitglied

avatar-1005.jpg


Dabei seit: 10.03.2020
Beiträge: 121
Entwicklungsumgebung: Visual Studio 6.0 Enterprise


JimStark ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top



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?
19.09.2020 15:50 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.280
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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).
19.09.2020 15:57 Beiträge des Benutzers | zu Buddylist hinzufügen
hypersurf hypersurf ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.10.2008
Beiträge: 491
Entwicklungsumgebung: VS Studio 2019, Android Studio
Herkunft: Münster


hypersurf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top



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?
19.09.2020 16:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.280
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
19.09.2020 16:24 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Monat.
Der letzte Beitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 20.10.2020 08:30