Ukrywanie danych w bazie danych

0

Czesc, zalozmy ze mam jakis program cos typu TODO list napisany w asp.net mvc wspolpracujacy z baza MSSQL. Wszyscy uzytkownicy pracuja na 1 bazie, w jaki sposob zrobic tak aby nikt nie mial dostepu do tych danych, tzn zeby nawet admin nie mogl podejrzec zaplanowanych zadan uzytkownikow?

0

np sprawdzasz czy zadanie ktore chcesz zobaczyc jest stworzone przez Ciebie jak nie to nie pokazujesz

0

Nie o to chodzi :)

Chce zeby admin nie mogl sobie otworzyc bazy wpisac selecta i zobaczyc wszystkich danych.

2

Użyj CMS do szyfrowania bajtów i zakoduj je w bazie jako np. base64 (jeśli Twoja wiadomość to tekst to użyj np. Encoding.UTF8.GetBytes żeby dostać bajty). W .NET do szyfrowania bajtów masz EnvelopedCms.

Generalnie działa to tak (na pierwszą część poszukaj gotowca - jeśli nie ma to poszukaj testów do tej klasy na githubie (np.: https://github.com/dotnet/corefx/blob/master/src/System.Security.Cryptography.Pkcs/tests/EnvelopedCms/GeneralTests.cs#L21)):

  • generujesz certyfikat (klucz publiczny np. RSA albo ECDH - są podzielone opinie które jest lepsze) i klucz prywatny
  • w CMS podajesz certyfikat jako odbiorce i co ma zaszyfrować
  • CMS generuje Ci byte[] które sam wie jak odczytać - wewnętrznie działa to tak, że CMS generuje losowe bajty jako klucz AES (lub inny wybrany algorytm) który służy do zaszyfrowania dokumentu. te losowe bajty zaszyfrowane są za pomocą klucza publicznego z certyfikatu. Żeby odczytać ten klucz potrzebujesz klucza prywatnego (nawet osoba która szyfrowała nie jest w stanie odczytać). Dodatkowo CMS koduje te bajty w postacie zgodnej ze specyfikacją tak, że jest w stanie je później jednoznacznie odczytać
  • byte[] zapisujesz albo bezpośrednio w bazie jeśli Ci baza na to pozwala albo jako text w postaci base64: https://docs.microsoft.com/en-us/dotnet/api/system.convert.tobase64string?view=netframework-4.7.2
0

@krwq: A jak ma się to szyfrowanie do prac na bazie, tworzenia indeksów, wyszukiwania itp? Czy z takiej bazy korzysta się analogicznie do "zwykłego" SQL, po prostu dajesz zapytanie SELECT FROM i całe odszyfrowywanie dzieje się w tle, całkiem przezroczyście? I czy (jeśli tak, to jaki) ma to wpływ na wydajność całego SQL'a (przy mniejszym obciążeniu pewnie niezauważalne, ale czy nie spowalnia to działania w przypadku większego ruchu)?

1

MSSQL ma wbudowane mechanizmy do szyfrowania:
https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/sql-server-encryption?view=sql-server-2017

Przykład:

https://www.mssqltips.com/sqlservertip/2431/sql-server-column-level-encryption-example-using-symmetric-keys/

Problem polega na tym, że można nie nadawać uprawnień dla sysadminow, ale sysadmini mogą je sobie nadać sami, nie wiem czy pisząc admin masz na myśli admina Twojej aplikacji, czy admina w rozumieniu silnika SQL...

0

Problem polega na tym, że można nie nadawać uprawnień dla sysadminow, ale sysadmini mogą je sobie nadać sami, nie wiem czy pisząc admin masz na myśli admina Twojej aplikacji, czy admina w rozumieniu silnika SQL...

Chcę, żeby nikt nie miał dostępu do tych danych. Żeby to były prywatne notatki jakichś osób i żaden admin systemu, programista itp nie mógł się do nich dostać. Podejrzewam, że jednak nie da się tak zrobić.

1

No to nie możesz używać do tego bazy tylko szyfrować po stronie clienta jego kluczem, a w bazie trzymać tylko zaszyfrowane dane

0

@Panczo: To chyba nawet nie jest kwestia zaufania. Zauważ, że w dużych firmach często masz hierarchie, do pewnych danych mają dostęp jedynie określone osoby. I nie chodzi mi tylko o IT, ale np. kwestia płatności. Często jest tak, że jedna księgowa/osoba odpowiedzialna za płatności wystawia polecenia przelewu, ale inna je akceptuje. W ten sposób ograniczasz ryzyko, że ktoś przeleje wszystko na swoje konto, a potem ucieknie. Tak samo tutaj - jeśli jest jakiś admin, który ma dostęp do wszystkiego, to może zrobić wiele złego. Może skopiować wszystkie dane, może je skasować itp. A ponadto - jeśli ktoś się włamie na jego konto/dojdzie do kompa, to też może narobić zamieszania.

Moim zdaniem takie ograniczanie uprawnień nie jest przejawem paranoi czy braku zaufania, ale raczej rozsądnym podejściem do kwestii bezpieczeństwa systemów.

3

Bez przesady. Jeśli ktoś ma zarządzać danymi, to znaczy, że firma ma (musi) mieć do niego zaufanie. To tak jakbyś szefowi firmy nie pozwalał wchodzić do magazynu, żeby nie widział ile towaru jest na stanie...
Argument z włamaniem do kompa również nie jest trafiony. Prędzej się włamie na konto właściciela notatki niż na konto sysadmina.

1 użytkowników online, w tym zalogowanych: 0, gości: 1