2012-12-11 14 views
6

Ich bin sicher, dass es viele Diskussionen bereits gibt, aber wie man ein Kennwort in einer Anwendung speichert? (Ich meinte nicht ein Benutzerpasswort in einer Tabelle in einer Datenbank gespeichert werden, aber das Passwort zum Erstellen Verbindungszeichenfolge)wie man Datenbankpasswort speichert

Ich habe Vorschläge gesehen wie es in einer flachen Datei wie XML-Datei verschlüsselt speichern, dann lesen Sie es + Entschlüssele es zur Laufzeit. Wenn diese Anwendung auf einem Server ausgeführt wird, ist dies eine sehr gute Wahl, aber was ist, wenn die Anwendung auf dem PC des Endbenutzers bereitgestellt wird? d.h. die flache Datei wird auf den PC des Benutzers kopiert. Ist das noch eine gute Übung? (Mein Instinkt ist ‚NEIN‘)

Ich kenne die Existenz von SecurityString, aber dann habe ich auch in einem Beitrag gelesen, das SecurityString kann leicht in gebrochen werden, auch.

Ist es eine gute Idee, Password Vault zu verwenden, das mit Windows 7 geliefert wird? Gibt es ein gutes Beispiel für die programmatische Nutzung? Ich habe ein Beispiel in msdn gesehen, aber erstens ist es mit "Windows 8" beschriftet, zweitens, als ich die Dateien heruntergeladen und die Lösung in Visual Studio 2012 EXPRESS geöffnet hat, konnte es nicht geöffnet werden.

Jeder Vorschlag ist willkommen ... vielen Dank.

--update--

Lassen Sie uns sagen, wird die Anwendung auf eine Handvoll von PCs innerhalb einer Windows-Domäne ausgeführt werden. (1) Beim Start führt die Anwendung eine LDAP-Authentifizierung durch (aktives Verzeichnis). Nur bei erfolgreicher Authentifizierung wird die Anwendung fortgesetzt, und (2) hinter der Szene kann die App eine Verbindung zur Datenbank herstellen, Benutzereingaben nehmen, um die db abzufragen, und hier kommt die db passwd in die Wiedergabe, um die Verbindungszeichenfolge zu erstellen (Nein, dies ist keine SQL SERVER-Datenbank, daher glaube ich nicht, dass die Option der Verwendung der Windows-Authentifizierung möglich ist, es sei denn, es wird ein kommerzielles Plug-in verwendet).

Der db befindet sich in der gleichen Domäne, und eingerichtet wurde bestimmten Bereich von IP-Adressen zu ermöglichen, und ist SSL aktiviert. Kurz gesagt, es ist in diesem Sinne ziemlich sicher. Das einzige Bit, das noch nicht sicher ist, ist, wie das db passwd für die Anwendung gespeichert wird.

Was mir ins Auge fiel, war die Mysql Workbench. Es speichert Datenbankverbindungen, einschließlich des Passworts - das in einem Passwortspeicher gespeichert ist. Das ist Mysqls eigene Implementierung eines Passwort-Tresors, und ich bin sehr gespannt, wie es gemacht wird.

+0

Welche Datenbank verwenden Sie, und wo sie gehostet? Liegt es in der gleichen Windows-Domäne wie der Client? – Jodrell

+0

Ich habe deinen Titel bearbeitet. Bitte lesen Sie "[Sollten die Fragen" Tags "in ihren Titeln enthalten?] (Http://meta.stackexchange.com/questions/19190/)", wobei der Konsens "nein, sie sollten nicht" lautet. –

+0

mögliches Duplikat von [Wie sichere ich Datenbank-Login und Passwort in einer C# -Anwendung sicher?] (Http://stackoverflow.com/questions/11685206/how-do-isafely-store-database-login-and-password -in-ac-sharp-application) – Barmar

Antwort

5

Wenn die Anwendung wird eingesetzt werden, wo man keine oder nur geringe Kontrolle über die Sicherheit des Systems hat, das heißt, externer Benutzer-PC, dann kann es eine Benutzer-Login Erstellen wert sein. Authentifizieren Sie den Benutzer gegen diese Anmeldung und verwenden Sie dann von einem relativ sicheren Server aus alle Anmeldeinformationen, die Sie zum Bereitstellen von Daten benötigen.

garantiert diese Sicherheit nicht, aber es wird einfacher sein, zu pflegen, wenn Sie zu einem bestimmten Zeitpunkt in der Zukunft das Passwort ändern müssen, oder wenn ein einzelner Benutzer beeinträchtigt wird.

8

Es gibt keine Möglichkeit, Ihren Benutzern ein Passwort zu geben und zu erwarten, dass es sicher bleibt. Selbst wenn es in Ihrer kompilierten Anwendung versteckt ist und mit einem Einweg-Hash-Hash-Code versehen wurde, wird der Entschlossene es wiederherstellen.

Stattdessen sollten Sie Ihre Sicherheitsarchitektur berücksichtigen.

Wenn Sie Dienste bereitstellen, die Ihre Anwendung verbindet sich dann sollten Sie auf die Bereitstellung irgendeine Art von robuster Authentifizierung als Teil Ihrer öffentlichen API aussehen.

Wenn die Verbindungszeichenfolge für die Verbindung mit einem anderen Teil der verteilten Software verwendet wird, sollten Sie das Kennwort vom Endbenutzer konfigurieren und in einem Schlüsselring oder einem anderen verschlüsselten Speicher speichern.

- Update -

Es sieht wie folgt aus könnte das sein, was Sie suchen;

http://www.microsoft.com/indonesia/msdn/credmgmt.aspx

+0

danke für deine antwort! Ich habe meinen Beitrag aktualisiert und Ihre Gedanken sind sehr willkommen. – user1866880