Mamy kilka danych:
- Programiści potrzebują repliki produkcyjnej bazy danych na swoich komputerach.
- Programiści mają hasło do wspomnianej bazy danych w plikach App.config.
- Nie chcemy, aby dane we wspomnianej bazie danych były zagrożone.
Kilka sugerowanych rozwiązań i ich wady:
- Szyfrowanie całego dysku. To rozwiązuje wszystkie problemy, ale obniża wydajność laptopa, a my jesteśmy start-upem, więc nie mamy pieniędzy na konie mechaniczne.
- Tworzenie maszyny wirtualnej z zaszyfrowanym dyskiem twardym i przechowywanie na niej bazy danych. Działa dobrze, ale nie pomaga zbytnio, ponieważ w Web.Config jest hasło.
- Rozwiązanie nr 2+ wymagające od programisty wpisania hasła do bazy danych za każdym razem, gdy coś uruchomi. Rozwiązuje wszystkie problemy, ale jest bardzo kłopotliwy dla programistów, którzy czasami uruchamiają aplikację kilka razy na minutę. Ponadto mamy wiele aplikacji, które łączą się z tą samą bazą danych, a implementacja ekranu hasła będzie musiała się różnić w poszczególnych.
Moje pytanie brzmi: czy istnieje jakieś wspólne rozwiązanie takiego problemu lub sugestie, jak sprawić, by którekolwiek z powyższych rozwiązań było wykonalne?
Odpowiedzi:
Nie tylko nie chcesz kopii produkcyjnej bazy danych, ale może ona być nielegalna. Na przykład w Stanach Zjednoczonych nie można przenosić danych produkcyjnych ze środowiska produkcyjnego, jeśli zawierają one informacje regulowane, takie jak osobiste dane zdrowotne, dane finansowe, a nawet dane, które można wykorzystać w przypadku kradzieży tożsamości. Jeśli to zrobisz, możesz zostać ukarany grzywną, stracić swoją zgodność, a zatem zostać poddany bardziej agresywnym audytom, a nawet zostać wymieniony w pozwie.
Jeśli potrzebujesz danych w skali produkcyjnej do testowania, masz kilka opcji:
Dla opcji nr 2
źródło
Czy możesz przynajmniej dać programistom maszyny wirtualne w twoim centrum danych, do których mogą oni RD na tę pracę? Chociaż naprawdę powinny pracować z danymi nieprodukcyjnymi, byłoby to bezpieczniejsze, dopóki nie możesz się tam dostać, ponieważ dane nie byłyby przechowywane na łatwo kradzionych laptopach.
źródło
Jeśli to możliwe, zmień sposób pracy.
Jak zauważyli inni:
Oba z nich narażają Cię na znaczne ryzyko i należy je zmienić, jeśli to możliwe. Powinieneś przynajmniej poważnie ocenić, jaki byłby koszt wprowadzenia tych zmian. Jeśli jest to zależność zewnętrzna, której nie możesz zmienić, zastanów się nad podniesieniem tej kwestii w odniesieniu do każdego, kto ma taką moc.
Jednak w prawdziwym świecie zmiana tego może być niemożliwa. Zakładając, że to, co robisz, jest legalne, być może będziesz musiał żyć z tym porozumieniem (przynajmniej tymczasowo).
Jeśli jest to naprawdę konieczne, wystarczy wykonać szyfrowanie całego dysku.
Biorąc pod uwagę ryzyko, musisz użyć najlepszej dostępnej opcji bezpieczeństwa i to wszystko. Jeśli jest hit wydajności, żyj z nim. Jest to koszt pracy z wrażliwymi danymi.
Gdybym był twoim klientem, nie byłbym pod wrażeniem, że zdecydowałeś się nie używać najlepszej dostępnej opcji bezpieczeństwa z moimi danymi, ponieważ spowodowało to nieznaczne spowolnienie laptopów.
źródło
Odpowiedź Corbina Marcha jest całkiem dobra, dodam tylko dodatkowy szczegół, że generalnie masz dwie klasy danych w produkcyjnej bazie danych: metadane systemu / aplikacji; oraz dane użytkownika klienta / dane transakcyjne. Ten ostatni NIGDY nie powinien być używany w środowisku programistycznym „takim, jakim jest”.
Rzeczywiście bardzo rzadko potrzebujesz rzeczywistych informacji o kliencie produkcyjnym, aby opracowywać.
Jeśli jednak problem, który opisuje OP w tym przypadku, dotyczy poufnych danych handlowych lub w inny sposób wysoce zastrzeżonych danych systemowych, które nie obejmują danych klientów, jest to wymagane przez programistów ... podejście do bezpieczeństwa musi obejmować schemat, który nie ma hasło db przechowywane gdzieś w postaci tekstu jawnego w pliku zasobów. Musi istnieć mechanizm, na przykład, aby ponownie wygenerować codzienne hasło, które nie jest przechowywane na dysku.
źródło
client user data/transactional data... should NEVER be used in a development environment "as is."
- Brzmi dla mnie niewykonalnie. Problemy programistyczne związane z produkcją związane z danymi konkretnego klienta byłyby nierozwiązywalne w ramach tego porozumienia. Ponadto rzeczywiste dane na żywo są niezwykle przydatne z punktu widzenia testowania. Działania prywatyzacyjne lub anonimowe powinny koncentrować się wyłącznie na danych, które są specjalnie regulowane.Nie podajesz, która baza danych i które środowisko.
Jeśli możesz korzystać ze zintegrowanych zabezpieczeń, baza danych nie będzie dostępna bez zalogowania jako ten użytkownik. Tak, jeśli dane znajdują się na twardym dysku, można je zhakować, ale jest to obrona pierwszego poziomu.
App.config sprawia, że myślę, że może to być .NET. Umieść config w pendrivie i przeczytaj go z pendrive'a. Jeśli dysk nie jest obecny, wpisz hasło użytkownika.
Czy istnieje sposób na przechowywanie hasła w pamięci przy jego pierwszym wprowadzeniu i odczytaniu przez wszystkich. Znowu nie podajesz środowiska. Pliki mapowane w pamięci
W przypadku niektórych TDE można przechowywać klucz na oddzielnym urządzeniu, aby dostarczały go tylko po uruchomieniu serwera bazy danych.
źródło
Jedną z możliwych opcji jest wykonanie kopii bazy danych i przeszukanie tej kopii za pomocą skryptu, aby uzyskać inne dane niż te, które są aktualnie w produkcji. Nie skończysz z tymi samymi danymi co produkcja Ale będziesz miał taką samą skalę.
źródło