memoryn Sie den ConnectionString

Hallo ich versuche, den besten path zu finden (oder einen guten), um einen ConnectionString zu speichern (meine App wird eine database in einem server verbinden, wird es mit ihm fortsetzen) und wie man mit dem Admin-Konto umgehen kann. Für alle Anwendungen mit Login muss ein Admin-Konto haben, richtig?

Ich denke so …

So installieren Sie eine App auf dem Computer, wie Sie den ConnectionString konfigurieren? Ich denke, das ist falsch, den Benutzer zu bitten, so etwas zu konfigurieren, wenn nicht versteht, was es ist oder es muss wirklich sein?

Und stellen Sie sich eines Tages vor, dass der ConnectionString aus irgendeinem Grund geändert werden muss, wenn sich die Admin acoount Anmeldeinformationen für die Anmeldung in einer Tabelle im server befinden, wie wird es dann möglich sein, sich bei der App anzumelden, um den ConnectionString zu ändern?

Das ist mein Problem jetzt … Ich weiß nicht, wie diese Art von Sachen behandelt wird, wenn es irgendwelche Regeln gibt, um dies zu behandeln, irgendeine gemeinsame Weise, weil ich anfange, ernsthafter mit dieser Art von Sachen zu arbeiten.

Hinweis: Ich denke, das ist nicht wichtig, aber meine App wird in WPF entwickelt.

Mit Verbindungszeichenfolgen zu einem MS SQL server haben Sie grundsätzlich zwei Möglichkeiten:

  1. Entweder ein Benutzername / Passwort-Paar speichern. Ihre Bewerbung muss in der Lage sein, es zu lesen, so theoretisch jeder Benutzer der Anwendung könnte das gleiche (er hat Zugriff auf Ihre Anwendung, so kann er es dekompilieren). Praktisch können Sie die Verbindungszeichenfolge mit einem Schlüssel in Ihrem Quellcode oder Anwendungsressourcen verschlüsseln und ganz sicher sein, dass Ihre Benutzer das Passwort nicht lesen können.
  2. Wenn Sie einige Benutzer haben, die in der Lage sein sollten, die Anwendung zu verwenden, und Sie glauben, dass sie und andere Benutzer, die Zugriff auf Ihre Anwendung haben können, aber das nicht in der Lage sein können, können Sie Windows-authentication verwenden und Integrated Security=True in deiner Verbindungszeichenfolge. Dies setzt voraus, dass du deine DB konfigurierst, damit die zugelassenen Benutzer darauf zugreifen können.

So oder so, Ihre Verbindungszeichenfolge sollte mit dem Rest der Anwendung gebündelt werden. Wenn du es jemals brauchst, musst du einfach eine neue Version freigeben. (Das funktioniert auch für die primitivste Version der Installation: "Kopiere diesen Bündel von fileen in ein Verzeichnis auf deinem Computer").

Jetzt kann die Verbindungszeichenfolge so ziemlich überall aufbewahrt werden, der günstigste Platz, der wahrscheinlich eine Anwendungseinstellungsdatei ist .

Wenn Sie sicher sein wollen, dass Ihre Benutzer nur die functionalität Ihrer Anwendung nutzen können und nicht direkt auf die database zugreifen können, müssten Sie so etwas wie einen Web-Service schreiben und nur indirekt mit der database verbinden.

Eine wirklich einfache Möglichkeit, DB-Zugriffssicherheit mit MS SQL server zu verwenden, ist die Verwendung von "Integrated Security = SSPI". Damit authentifiziert MS SQL server gegen die Windows-Benutzerentität, unter der der databasezugriffsprozess läuft. Es passiert alles scheinbar mit MS SQL Windows Authentication ohne die Notwendigkeit, alle Benutzernamen oder Passwörter innerhalb der Anwendung zu speichern.

Eine andere Möglichkeit, es zu tun ist, eine configurationsdatei mit der database-Verbindungszeichenfolge zu verteilen, wobei mindestens das Passwort verschlüsselt ist.

Wir haben viele MySQL-databaseen auf mehreren servern, also MS SQL SSPI deckt uns nicht ab.

Für serverseitige Software speichere ich databaseverbindungszeichenfolgen und Anmeldeinformationen in einer separaten XML-configurationsdatei, die alle server-Side-Software verwendet. Die Anmeldeinformationen sind topisch mit allen databaseinformationen verschlüsselt angeordnet. Ich verwende eine gemeinsame file für alle server-processe und entwickelte eine kleine Verschlüsselung / DB-configurationsdatei-Management-GUI, so dass das Management vereinfacht wird und der Zugriff auf alle Software mit demselben Code universell ist.

Für Endbenutzer-Software ist es zu schwierig, mit lokalen configurationsdateien wegen der Benutzerwartung zu pflegen. Für "fat client" -Software pflege ich eine separate database mit verschlüsselten Anmeldeinformationen auf einem server in unserer DMZ, die für jedermann zugänglich ist, dass Software (es gibt nicht so viel verteilte Fett-Client-Software). Unsere Web-App-Software verfügt über eine konsolidierte Benutzerdatenbank das den Zugriff für alle Benutzer / Rollen für alle Apps steuert, und alles wird durch das eine System portiert, so dass es viel einfacher ist, die Benutzerdatenbank zu mantainieren.

Ehrlich gesagt, ist das Polyglot-System zunehmend hässlich zu pflegen. Ich würde unseren Haupt-Domain-LDAP-server (Windows ADS) verwenden, aber unsere Firmenrichtlinien halten alle Domain-Member-server vollständig aus dem Zugriff außerhalb unserer vertrauenswürdigsten VPN und damit unzugänglich in zu vielen Umständen.

Ich hoffe irgendwann mal time, einen * Nix-basierten LDAP-server in unserer DMZ einzurichten und dort alle Anmeldeinformationen zu zentralisieren.

Wenn Sie die Verbindungszeichenfolge in einer configurationsdatei oder irgendwo anders bei der Auswahl speichern müssen, können Sie die verschlüsselten Ergebnisse in einen String verschlüsseln und stützen. Überprüfen Sie hier für eine Encrypt () – und Decrypt () – Implementierung.

Es ist möglich, während der Installation der Anwendung fileen (wie zB die .config-file) zu manipulieren. So ist es akzeptabel, den Benutzer / Admin (während des Setups) für den Namen des servers zu fragen (und sogar für einen Benutzernamen und ein Passwort, vorausgesetzt, Sie verschlüsseln diese, aber ich würde lieber integrierte security verwenden).

Für Updates der Verbindungszeichenfolge machen Sie einfach einen neuen Installer.

Alternative: memoryn Sie die Verbindungszeichenfolge im aktiven Verzeichnis oder in einem anderen bekannten memory, so dass alles, was Sie tun müssen, den Wert an einem Ort ändern wird.