Wie können SQL Server-Daten am besten verschlüsselt / entschlüsselt werden, um zu verhindern, dass selbst Entwickler sie sehen?

8

Hier ist ein interessantes Problem, und ich suche nach einem Muster, das alles funktionsfähig hält.

Ich baue eine Smart-Client-App für ein Schulsystem. Es enthält Informationen über Schüler einschließlich ihrer Zeugnisse, Krankheitstage und so weiter. Es werden Berichte auf Schülerebene erstellt, einschließlich ihrer Zeugnisse, die alle mit sehr persönlichen Kommentaren ihrer Lehrer versehen sind. Die App ruft Daten über Webdienste vom Remote-Server ab.

Die Daten sind also ziemlich vertraulich. Ich werde es in der Datenbank verschlüsseln und es beim Abrufen entschlüsseln - kein Problem dort.

Das Problem ist, dass mein Team und ich nie die Produktions-Klartextdaten sehen sollten. Ein interessantes Problem ergibt sich dann für die Untersuchung von Produktionsfehlern! Wir wollen den gleichen Datensatz wie der Benutzer öffnen, um zu sehen, was er sieht. Aber wenn wir das tun, verletzen wir die Vertraulichkeit.

Mein Gedanke ist das und es ist nicht perfekt.

  • Verschlüsseln Sie zuerst die Daten, bevor Sie sie in der Datenbank speichern, entschlüsseln Sie sie auf der Benutzeroberfläche. Nichts neues da.
  • Zweitens, fügen Sie einen Mechanismus in die Benutzeroberfläche ein, um privilegierte Daten zu verschleiern. (d. h. Namen und Lehrererzählung sind privilegiert; Klassenstufe ist nicht.) Ich werde sie nicht verschlüsseln, aber verschleiern - selbst eine einfache Schlüsselverschiebung würde ausreichen. Der Grund dafür ist, dass diese Berichte voller Text sind. Wenn ich einen Absatz verschlüssle und das Ergebnis in einem Bericht zeige, wird es eine feste Wand aus Großbuchstaben sein, die nicht wie der ursprüngliche Text aussieht. Wenn ich die alphabetischen Zeichen nach oben verschiebe, wird es nicht lesbar sein, aber immer noch wie Absätze, Sätze, Aufzählungen und ähnliches aussehen. Es ist einfacher zu sehen, was schief läuft, ohne visuelle Komplikationen hinzuzufügen.
  • Drittens habe ich eine Konfigurationseinstellung vorgenommen, um diese UI-Verschleierung nur für Mitglieder von Say, der SysAdmin-Rolle, nicht von Teacher oder SchoolAdmin durchzuführen. Während der Entwicklung setze ich diese Konfiguration auf False und wir entwickeln gegen falschen Klartext. Für die Produktion setzen wir es auf True, und von diesem Punkt an sehen wir nur noch verschleierten Text.

Schließlich müssen wir in den Fällen, in denen wir unbedingt den Klartext der Datensätze eines Studenten sehen müssen, eine Überschreibungseinstellung in der Benutzeroberfläche vornehmen, die die Konfigurationseinstellung ablehnt und den Klartext anzeigt. Und das schaffen wir auf menschlicher Ebene - indem wir die Schulverwaltung informieren, dass wir an DIESEM Datum aus DIESEM Grund die Unterlagen dieses Schülers sehen müssen, etc. Unterschriften werden unterschrieben, murrende Zustimmung gegeben, Anwälte werden zu ihren Jets geschickt, spülen und wiederholen.

Gedanken? Ich fühle, dass dies muss ausgetretener Boden sein. Bitte helfen Sie mir, wenn möglich, diesen Plan zu verbessern.

    
TomK 28.02.2010, 16:33
quelle

4 Antworten

0

Tatsächlich müssen Sie die Daten auf der Benutzeroberfläche nicht entschlüsseln. SQL Server verfügt über Tools für die Echtzeit-Verschlüsselung für Sie. Wenn jemand den Klartext sehen wollte, konnte er in eine Rolle fallen, die ihm diese Erlaubnis gab (und wenn er fertig war).

Wenn Sie jedoch die Vertraulichkeit der Daten sehen, können Sie die Produktionsdaten natürlich nicht sehen. Die einzige Lösung ist eine Kopie der Daten entweder mit Munged-Daten oder völlig zufälligen Daten.

    
Thomas 28.02.2010, 16:46
quelle
2

Nachdem wir in einem Team mit einem ähnlichen Problem waren, mussten wir einen riesigen Vorrat an gefälschten Daten verwenden. Produktion war IMMER raten Arbeit. Niemand durfte irgendwelche der Chiffren kennen.

BEARBEITEN

Wenn Sie vollkommen sicher sein wollen, würden Sie es einem externen Unternehmen erlauben, mit den Daten umzugehen, was sie in die Lage versetzt, die Daten zu schützen und garantiert, dass Sie nicht verklagt werden, wenn ein Fehler passiert. Nur meine .02

    
Woot4Moo 28.02.2010 16:41
quelle
1

Im Allgemeinen habe ich das wie folgt angegangen:

SQL Server verfügt über eine Verschlüsselungsfunktion - entweder transparente Verschlüsselung (die für Ihren Fall nicht geeignet ist, da entschlüsselte Daten in Abfragen angezeigt werden) oder schlüsselbasierte Verschlüsselung, bei der Benutzerkonten Zugriffssteuerungslisten für den Schlüssel besitzen. Mit dieser Methode erstellen Sie ein X509-Zertifikat auf dem SQL-Server selbst und generieren dann symmetrische Schlüssel mit geeigneten ACLs. Innerhalb Ihrer gespeicherten Prozeduren können Sie dann den symmetrischen Schlüssel öffnen, um unverschlüsselte Daten an Ihre Anwendung zurückzugeben. Natürlich sollten Sie sich mit sicheren Mitteln mit SQL verbinden - Sie können ein X509-Zertifikat auf den SQL-Server setzen, um Verbindungen zu schützen.

Natürlich haben Sie jetzt das Problem der Schlüsselverwaltung. Sie können ein spezifisches Windows-Konto erstellen, unter dem Ihre Anwendung läuft, mit einem zufälligen starken Passwort, das verworfen wird, sobald Sie den Anwendungspool konfigurieren und dieses NT-Konto zu SQL hinzufügen (wenn Sie innerhalb einer Domänenumgebung sind, ist dies einfach) zu tun, Arbeitsgruppen müssen Sie das Konto auf dem IIS und SQL-Server spiegeln). Zum Debuggen benötigen Sie ein anderes Konto mit Zugriff auf die Schlüssel. Das Passwort für dieses Konto sollte in einem "break glass" eingerichtet sein - irgendwo gespeichert, das auditierbar ist, oder die Hälfte des Passwortes wird von zwei oder mehr Personen geteilt, die zustimmen müssen, mit formeller Abzeichnung, dass es benötigt wird (und dann wird es einmal geändert )

Es gibt eine Einführung in die SQL-Verschlüsselung hier , aber ACLs werden nicht behandelt. MSDN hat einen ganzen Abschnitt darauf, der auch Authenticators und die verschiedenen Optionen umfasst, die Ihnen zur Verfügung stehen.

Wenn Sie einen Verschlüsselungs-Webdienst verwenden, den Sie zum Verschlüsseln von Daten aufrufen, wird eine GUID-Referenz auf einen Schlüssel und den Chiffretext zurückgegeben. Auf diese Weise kann der Schlüssel in einer gut geschützten Datenbank gespeichert werden und die Entschlüsselungsfunktionen können pro Konto geschützt werden. Auch hier müßtest du einen break-glass-Account haben. Ich habe dies getan, wenn Kunden sich nicht sicher genug fühlen, SQL-Verschlüsselung selbst zu verwalten.

    
blowdart 28.02.2010 16:49
quelle
0

Eine Sache, die Sie unbedingt haben sollten, ist ein unveränderlicher Audit-Trail. Wann immer jemand auf vertrauliche Daten zugreift, wird ein Audit-Datensatz erstellt. In Fällen, in denen SysAdmins Zugriff auf Berichtsdaten anfordert, die normalerweise nicht angezeigt werden sollen, werden Ausnahmen protokolliert.

Der Kunde sollte einen Geschäftsprozess einrichten, um alle Ausnahmen im Audit-Protokoll regelmäßig zu überprüfen. Dies sollte sowohl als Abschreckung für den Missbrauch des Systems dienen, als auch Untersuchungen nach der Tat ermöglichen, wenn jemand > schurkisch wird.

    
caf 28.02.2010 23:14
quelle