Was ist der beste Weg, Passwörter konfigurierbar, zu halten, ohne sie zu leicht verfügbar für die flüchtigen menschlichen Leser zu haben?

StackOverflow https://stackoverflow.com/questions/258299

  •  06-07-2019
  •  | 
  •  

Frage

Ich habe eine Datenbank, die viele verschiedene Client-Anwendungen (ein paar Brocken von Web-Services, einige Java-Anwendungen und ein paar dot net-Anwendungen) verbunden werden soll. Nicht alle davon laufen auf Windows (leider, sonst wäre es dies eine einfache Antwort Frage stellt mit nur Windows-Authentifizierung für Datenbankverbindungen ermöglichen). um die Systeme liegen im Moment werden die Passwörter in verschiedenen Konfigurations / properties-Dateien gespeichert. Idealerweise haben nur die Support-Mitarbeiter Zugriff auf die Server, auf denen die Dateien ausgeführt werden, aber wenn jemand anderes erhält Zugriff auf einen des Servers, würden sie genügend Datenbankberechtigungen haben ein faires Gleichgewicht geraten von Daten zu erhalten, wie es jetzt steht.

Meine Frage ist dann, Was ist der beste Weg, um die Passwörter konfigurierbar zu halten, ohne auf die lässig menschlichen Leser es zu leicht verfügbar zu haben?

Bearbeiten Nur um zu klären, DB-Server ist Windows Server 2003, MS SQL 2005 ausgeführt wird.

. PS: Ich sehe keine Fragen, dass diese Duplikate, aber wenn es Sie fühlen sich frei, dieses zu schließen

War es hilfreich?

Lösung

Ich gehe davon aus Sie die Passwörter von beiläufigen Beobachter ausblenden möchten. Wenn sie böse waren, stählerne Augen Beobachter mit Zugang zu allen Quellcode auf einem der Maschinen, die verbinden, dann können sie das Passwort mit einem bisschen Reverse Engineering bekommen.

Denken Sie daran, dass Sie nicht den gleichen Schutz für jeden verschiedenen Client verwenden müssen. Ein paar Schritte: -

  1. Erstellen Sie verschiedene Datenbank-Accounts für verschiedene Systeme, die auf Ihre Datenbank zugreifen
  2. Beschränken Sie den Zugriff auf die Datenbank nur, was sie benötigen, um Ihre eingebaute Datenbank GRANTs mit
  3. Speichern Sie ein Triple-DIE (oder was auch immer), um in einer Passwort-Manager-Klasse auf Ihrer Datenbank. Verwenden Sie diese Option einen verschlüsselten Wert in Ihren Eigenschaften Datei zu entschlüsseln.

Wir haben auch die Anwendung Aufforderung zur Eingabe einer Passphrase beim Start in Betracht gezogen, die haben aber nicht umgesetzt, da es wie ein Schmerz und Ihre Operationen scheint Mitarbeiter müssen dann das Passwort kennen. Es ist wahrscheinlich weniger sicher.

Andere Tipps

Lassen Sie sich das folgende gemeinsame Szenario übernehmen:

  • Sie verwenden die gleiche Codebasis für alle Umgebungen und Ihre Codebasis die Datenbank-Passwörter für jede Umgebung hat.

  • Die Personal (sysadmins, Konfigurationsmanager), die Zugriff auf Ihre Produktion Anwendungsserver erlaubt die Produktion Datenbank-Passwörter und sonst niemand wissen.

  • Sie wollen nicht, dass jemand mit Zugriff auf den Quellcode wissen, was die Produktion Passwörter sind.

In einem Szenario wie diese, können Sie die Produktion Passwörter in Eigenschaftsdateien, die Ihre Anwendung verschlüsseln und speichern. Innerhalb der Anwendung können Sie eine Klasse enthalten, die die Passwörter aus der Eigenschaftendatei liest und entschlüsselt, bevor sie in die Datenbank-Treiber übergeben. der Schlüssel und der Algorithmus jedoch verwendet, um das Passwort zu entschlüsseln, ist nicht Teil des Quellcodes, sondern auf die Anwendung als Systemeigenschaft zur Laufzeit übergeben. Dies entkoppelt das Wissen der Schlüssel aus dem Quellcode der Anwendung und jeder, der Zugriff nur auf die Anwendungscode Quelle wird nicht mehr in der Lage sein, um das Passwort zu entschlüsseln, weil sie keinen Zugriff auf die Laufzeitumgebung der Anwendung (App-Server).

Wenn Sie Java verwenden einen Blick auf diese für ein konkretes Beispiel. Das Beispiel verwendet Frühling und Jasypt. Ich bin zuversichtlich, dass irgendeine Sache wie diese können auf andere Umgebungen wie .NET hochgerechnet werden

Bei meinem alten Arbeitsplatz haben wir ein System, bei dem alle Passwörter verschlüsselt wurden (Triple-DAS mit oder was auch immer wir zu der Zeit verwendet hatten). Die Passwörter wurden häufig in Eigenschaftsdateien gespeichert (dies in einem Java-System war).

Wenn nötig das Passwort geändert wird, könnten wir einfach nutzen! „Klartext“ als Wert, und dann ist es unser Code würde laden, verschlüsseln und speichern Sie den verschlüsselten Wert wieder in der Eigenschaftendatei.

Das bedeutete, dass es möglich war, das Passwort zu ändern, ohne zu wissen, was der ursprüngliche Wert war - nicht sicher, ob das die Art von Sache, die Sie fragen

Es klingt wie es keine einfache Antwort ist (wegen der unterschiedlichen Arten von Anwendungen, die eine Verbindung) ... wirklich, das einzige Problem, das ich sehe, ist die Java-Apps, die direkt auf die Datenbank zu verbinden scheinen. Ist das richtig?

Wenn ja, hier ist was Sie tun können:

1) Ändern Sie alle clientseitige Anwendungen, die direkt an die DB eine Verbindung über einen Dienst zu gehen. (Wenn sie Haben direkt zu verbinden, dann zumindest ihr einen ersten Schritt geben, um „Passwort zu erhalten“ von einem Service, dann können sie direkt anschließen).

2) Bewahren Sie die Passwörter in der Datei web.config (wenn Sie wählten .Net Web Services) zu tun, und dann verschlüsseln die „Verbindungszeichenfolgen“ -Abschnitt der Datei.

Sie Passwörter nicht verwenden, Server zu Server-Authentifizierung kann in der Regel durch die Verwendung einer Schlüsseldatei oder ein Client-Zertifikats oder eine andere Art und Weise andere als ein Passwort durchgeführt werden.

Sie können eine reversible Verschlüsselung Algorithmus z.B. Blowfish speichern die Passwörter als Notlösung. Es sollte eine Reihe von freien Bibliotheken werden Sie diese verwenden können, in alle Ihre Programme zu erstellen, die diesen Zugang benötigen.

Bruce Schneier Seite auf Blowfish

Wikipedia-Artikel über Blowfish

Für das Java-Zeug, wenn Sie einen App-Server verwenden sehen, wenn Sie eine Datenquelle definieren können, und Ihre Anwendungen können an der Datenquelle erhalten JNDI verwenden. Auf diese Weise die Datenquelle Verwaltung (einschließlich Verbindungsdaten) von dem App-Server gehandhabt wird, und der Anwendungscode muss für eine Datenquelle tun fragen.

NTLM-Authentifizierung oder LDAP-basierte (Active Directory) Authentifizierung sollte mit einem wenig Aufwand zur Verfügung steht. Dies würde ermöglichen es Ihnen, Ihre „Windows-Authentifizierung“ für Anwendungen zu nutzen.

Es ein bisschen eine Migration bedeuten kann, für Ihre IT-Mitarbeiter, aber SSO für eine Reihe von Anwendungen ist schön.

Ja, ich habe mit der Möglichkeit zur Speicherung des (gesalzen) Hashes vereinbaren. Ich würde einen (gesalzen) SHA256 Hash-Wert des in der Datenbank gespeicherten Kennwort empfehlen. Vergessen Sie auch nicht die sicheren Passwort-Regeln zu erzwingen.

Verschlüsselung ist keine gute Idee. Wenn jemand den Schlüssel compromize kann er es entschlüsseln. Verwenden einer Hash-algorith mit Salz paswords zu speichern. Hash-Algorithmen sind ein Weg, so dass sie nicht reversibel. Aber sie sind anfällig für Wörterbuchangriffe so verwenden Salz (concatane Klartext mit etwas langer und ausführlicher als Hash-it). Es schützt auch Datenbank von internen Angriffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top