7 Stimmen

Speichern von SQL-Anmeldeinformationen korrekt

Zunächst einmal handelt es sich um eine Bildungsfrage - nicht um etwas, das ich in einer produktiven Anwendung umsetze, da ich die Grundlagen von C# lerne.

Derzeit habe ich eine Lösung mit 2 (eigentlich 3, aber eines ist Unit Testing) Projekten;

  • Formular
  • Klassenbibliothek

In der Klassenbibliothek habe ich eine Klasse namens Database.cs, die mit einer MySQL-Datenbank kommuniziert. Ich kommuniziere nicht direkt mit dieser Database.cs-Klasse, sondern andere Klassen innerhalb der Klassenbibliothek tun dies (zum Beispiel Products.cs). Allerdings benötige ich Anmeldeinformationen, um eine Verbindung zu dieser MySQL-Datenbank herzustellen, und ich bin mir nicht sicher, wie ich dies sicher tun soll.

Speichern Sie es innerhalb der Klassenbibliothek / codieren Sie die Anmeldeinformationen innerhalb der Klasse.

Dies würde für mich keinen Sinn machen, da ein Benutzer leicht die DLL abrufen kann und er technisch gesehen die Anmeldeinformationen für die Datenbank hat.

Geben Sie die Anmeldeinformationen über das Formular an eine Klasse weiter (wie Products.cs) und diese Klasse gibt sie weiter, während sie das Datenbankobjekt initialisiert

Könnte funktionieren, habe es versucht und es funktioniert, aber ich bin mir nicht sicher, ob dies der "sauberste" Weg ist.

Schreiben Sie eine statische Klasse, die Eigenschaften mit den Anmeldeinformationen enthält

Wenn ich diese statische Klasse wieder innerhalb der Klassenbibliothek erstelle, bin ich so ziemlich genauso wie in meinem ersten Beispiel. Wenn ich diese statische Klasse im Form erstellen würde, müsste ich eine Referenz zum Formularprojekt aus meiner Klassenbibliothek hinzufügen (nicht der Weg, den ich mir wünsche).

Ich habe versucht, nach Informationen zu suchen, aber offensichtlich mache ich etwas falsch. Gibt es noch einen anderen Weg, dies zu tun?

4voto

Ramunas Punkte 3803

Zunächst einmal sollten Sie niemals Anmeldedaten direkt im Code fest codieren, da sich Anmeldedaten im Laufe der Zeit ändern können. Das bedeutet, dass Sie Ihre Anwendung jedes Mal neu kompilieren und neu bereitstellen müssen, wenn sich die SQL-Anmeldeinformationen ändern.

Normalerweise werden alle zum Verbinden mit der Datenbank benötigten Informationen in einer Anwendungs-Konfigurationsdatei in Form einer Verbindungszeichenfolge gespeichert.

Wenn Ihre Anwendung eine Webanwendung ist, sind Sie auf der sicheren Seite, da die web.config-Datei (eine Konfigurationsdatei für Webanwendungen) auf einem Webserver gespeichert ist und niemals für Webanfragen freigegeben wird. Aber wenn es sich um eine Windows Forms-Anwendung handelt, greifen Sicherheitsüberlegungen, was bedeutet, dass jeder Benutzer, der Ihre App verwendet, in die Anwendungs-Konfigurationsdatei schauen und Anmeldeinformationen erhalten könnte. Wenn es sich um Microsoft SQL handeln würde, würde ich empfehlen, die Windows-Authentifizierung zu verwenden. Aber bei MySQL müssten Sie Benutzername und Passwort wohl in die Verbindungszeichenfolge speichern. Dann würde ich vorschlagen, Ihre Verbindungszeichenfolge zu sichern, indem Sie sie verschlüsseln.

Wenn Ihre Benutzer sich am MySQL-Server authentifizieren können/müssen (MySQL-Benutzername und Passwort eingeben müssen), könnten Sie eine Verbindungszeichenfolgen-Vorlage verwenden und bestimmte Teile davon durch Benutzername und Passwort ersetzen:
app.config

C#-Code

var benutzername = textboxBenutzername.Text;
var passwort = textboxPasswort.Text;

var verbindungszeichenfolge = string.Format(ConfigurationManager.ConnectionStrings["MyApplication"].ConnectionString, benutzername, passwort)
// an diesem Punkt haben Sie eine Verbindungszeichenfolge, die an Ihre Produktklasse übergeben werden könnte

1voto

Saranya Punkte 23

Geben Sie Ihre Anmeldeinformationen nicht fest ein, da dies möglicherweise Probleme verursacht, erstens, wenn Sie später Ihre Anmeldeinformationen für die Datenbank ändern müssen, müssen Sie Ihre Klassenbibliothek neu kompilieren, zweitens wird die Sicherheit beeinträchtigt.

Es ist eine gute Technik, die Verbindungsinformationen in der Hauptanwendung zu belassen, anstatt sie in Ihrer Datenschicht zu speichern. Refaktorisieren Sie Ihre Datenschicht, um die Verbindungszeichenfolge zur Laufzeit anzunehmen, dieser Wert muss von der Hauptanwendung an die Datenzugriffsschicht übergeben werden.

Auf diese Weise erhalten Sie 2 Vorteile:

  1. Bei der Bereitstellung Ihrer Anwendung kann der bereitgestellte Speicherort abweichende Verbindungsinformationen als Ihre Entwicklungsumgebung haben
  2. Sie können Verbindungszeichenfolgen in Ihrer Konfigurationsdatei verschlüsseln, um die Sicherheit zu erhöhen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X