2012-02-22 12 views
5

Szukam używać szyfrowania bazy danych w bazie danych, z którą łączę się w mojej aplikacji za pośrednictwem. Struktura Entity.SQL Server 2008 R2 Encryption - z Entity Framework

Czy istnieje łatwa metoda/najlepsza praktyka, aby móc uzyskać niezaszyfrowane dane & zapisywać zaszyfrowane dane z powrotem do bazy danych. Nie chcę specjalnie edytować edmx xml ręcznie, ale staram się znaleźć trochę zasobów, które powiedzą mi, jak to osiągnąć.

Mam zamiar użyć klucza symetrycznego i potrójnego algorytmu szyfrowania DES.

+0

A więc chodzi o przechowywanie zaszyfrowanych danych, a nie zabezpieczonego kanału? –

+0

Tak, przechowywanie zaszyfrowanych danych. –

Odpowiedz

5

Co masz na myśli przez SQL Server 2008 R2 Encryption - jest to bardzo niejasne pytanie, ponieważ ma wiele znaczeń.

Twoje ogólne opcje:

  • Transparent Data Encryption - Cechą SQL Server - cała baza danych są szyfrowane po stronie SQL Server. Twoja aplikacja nie musi się zmieniać i powinna działać z EF.
  • Szyfrowanie na poziomie komórki - funkcja programu SQL Server - wybrane kolumny są szyfrowane i przechowywane jako varbinary. Wymaga to specjalnych poleceń dotyczących zapytań i przechowywania, więc będziesz musiał używać specjalistycznych widoków bazy danych i procedur przechowywanych, aby współdziałać z twoją bazą danych, jeśli chcesz używać EF. Jeśli nie chcesz korzystać z widoków bazy danych i procedur przechowywanych, będziesz musiał ręcznie obsługiwać EDMX i zapisywać wszystkie te polecenia SQL w swojej części SSDL.
  • Szyfrowanie wykonywane w aplikacji - będziesz używać zdarzeń ObjectMaterialized i SavingChanges do obsługi deszyfrowania i szyfrowania się. Prawdopodobnie będziesz w stanie szyfrować i odszyfrowywać tylko dane łańcuchowe lub binarne, ponieważ typ danych właściwości nie może się zmienić (w przypadku łańcucha znaków będziesz musiał przechowywać zaszyfrowaną wartość jako ciąg base64).
+0

Dzięki za dokładną odpowiedź. Zdyskredytowałem już TDE, ponieważ nie zapewni wymaganego poziomu szyfrowania. Nie chcę też szyfrować w mojej aplikacji, ponieważ uważam, że nie jest to tak korzystne jak szyfrowanie sql. Wygląda na to, że druga opcja jest szczegółowa, co muszę zrobić - ponieważ nie sądzę, że istnieje inny sposób, w jaki EF będzie działać tak, jak tego chcę. –

+0

@ Ladislav Mrnka: w przypadku szyfrowania na poziomie komórki, jeśli używałeś SP i widoków do interakcji z DB, co przeszkadza hakerowi w używaniu tego samego SP/widoków z odszyfrowywania twoich danych? – ribald

+1

@ribald: Chodzi o posiadanie danych zaszyfrowanych na dysku. Jeśli atakujący uzyska poświadczenia, aby uzyskać dostęp do bazy danych za pomocą normalnego połączenia, jest niewiele, co może zrobić dowolny rodzaj szyfrowania na poziomie bazy danych lub komórki na poziomie bazy danych w celu ochrony danych. –

0

Możesz utworzyć widok, który zwróci odszyfrowane dane.

Na przykład:

CREATE VIEW [your_view_name] as 
SELECT 
CONVERT(varchar(200),DECRYPTBYPASSPHRASE('[your_symmetric_key]', [encrypted_field])) As [encrypted_field], 
FROM [your_table_name] 

Następnie dodaj swój pogląd, jako podmiot w modelu EF.

Aby wstawić, zaktualizować lub usunąć operacje, użyj procedur przechowywanych.

+0

Oznacza to trudne kodowanie klucza symetrycznego do definicji widoku, prawda? Również każdy, kto ma dostęp do widoku, będzie mógł go wyświetlić. –

+0

Moje drzwi frontowe są tam i są odblokowane, ale na wszelki wypadek tutaj jest klucz. – Tony

Powiązane problemy