Sie haben hier nur eine begrenzte Anzahl von Ansätzen hinsichtlich der Sicherheit Ihres Verbindungsstrangs.
Eine Option, wenn Ihre Verbindungszeichenfolge in einer Datei web.config oder app.config (für Web- bzw. Windows-Anwendungen) gespeichert ist, können Sie den Wert verschlüsseln. Ist hier ein paar Links, die detailliert, wie das getan werden kann:
Encrypting Web.Config Values in ASP.NET 2.0
Encrypt Connection Strings in VS 2005 .config Files
Natürlich, wie Sie ganz richtig sagen, dies ist die Sicherheit nicht erreichen können, die Sie sich wünschen, da die Anwendung kann Gut läuft auf dem Computer des Benutzers, und somit die app.config-Datei (auch in einem verschlüsselten Zustand) und die zugehörigen Verschlüsselungs-/Entschlüsselungsschlüssel wird auch auf dem Computer des Benutzers verfügbar sein. Ein sachkundiger und unternehmungslustiger Benutzer könnte dann Zugang zu Ihrer "Klartext" Verbindungszeichenfolge erhalten.
IMHO, eine der besten Möglichkeiten, um zu verhindern, dass Ihre Benutzer Ihre Datenbankverbindungszeichenfolge sehen, ist, sie niemals an sie zu geben, verschlüsselt oder nicht. Dies würde erfordern, dass Ihre Windows-Formularanwendung nicht direkt mit einer Datenbank kommuniziert (mit einer Verbindungszeichenfolge), sondern direkt mit einem Webdienst kommuniziert.
Natürlich würden Sie der Windows-Formularanwendung eine URL geben, mit der sie auf den Webdienst zugreifen können, aber dann wird die Verwendung dieses Webdienstes eingeschränkt und kontrolliert, indem nur Zugriff mit einer benutzerspezifischen Kombination aus Benutzername und Kennwort gewährt wird .
Auf diese Weise können Sie die Web-Service-Host (muss nicht sein, web service - es könnte eine Remote-Anwendung sein, die Ihre Windows-Formularanwendung mit über .NET remoting oder WCF kommunizieren würde) auf einer physisch getrennten Server/Maschine, Sie tun haben vollständige Kontrolle über und schützen Sie diese Maschine mit perimeter security.
Die Anwendungen und Dienste, die auf diesem sicheren Computer ausgeführt werden, haben Zugriff auf die Verbindungszeichenfolge der Datenbank, und diese Verbindungszeichenfolge darf niemals außerhalb des Umfangs dieses Computers verbreitet werden. vorausgesetzt, dass die oben genannte Perimetersicherheit vorhanden ist und effektiv ist).
Natürlich würde die Implementierung all dies sicherlich bedeuten, große architektonische Änderungen an Ihrer Anwendung, die, abhängig von der Größe und Art Ihrer Anwendung, lohnt oder nicht lohnt, jedoch die einzige Möglichkeit, Ihre wirklich zu sichern Die Verbindungszeichenfolge von einem Benutzer (oder der Maschine eines Benutzers) stellt sicher, dass sie niemals (in verschlüsselter oder entschlüsselter Form) für den Benutzer (oder den Computer des Benutzers) verfügbar ist.
Sobald Sie die Verbindungszeichenfolge auf dem Computer des Benutzers, auch in einem verschlüsselten Zustand, müssen Sie die gleiche Maschine, die die verschlüsselte Verbindungszeichenfolge entschlüsseln können, geben, und es gibt die schwache Verbindung in der Kette und der Punkt, an dem (zu einem findigen Benutzer) Ihre Klartextverbindungszeichenfolge bestimmt werden kann. Sie könnten die Entschlüsselung der verschlüsselten Verbindungszeichenfolge auf eine andere (sichere) Maschine abladen, aber das ist nur eine Abwandlung des zuvor erwähnten Client-Server-Mechanismus, wobei der Teil, der sicher gehalten wird (Entschlüsselungsschlüssel, Verbindungszeichenfolge usw.), ausgeführt wird auf einer anderen Maschine unter Ihrer eigenen sicheren Kontrolle.
Ihre App kann Hashes entschlüsseln? – yfeldblum