Niedawno miałem programistę przypadkowo próbującą przywrócić bazę danych do produkcji, kiedy powinien był przywrócić kopię tymczasową. Jest to łatwe, biorąc pod uwagę, że nazwy db są podobne, tzn. CustomerName_Staging kontra CustomerName_Production.
Idealnie byłoby mieć je na całkowicie osobnych polach, ale jest to kosztowne i, ściśle mówiąc, nie zapobiega temu samemu, jeśli użytkownik połączy się z niewłaściwym polem.
Sam w sobie nie stanowi to problemu z bezpieczeństwem - był to właściwy użytkownik pracujący z bazą danych pomostowych, a jeśli trzeba wykonać prace nad produkcyjną bazą danych, to również on. Chciałbym mieć przedstawiciela ds. Rozmieszczania, który rozwiałby te obawy, ale zespół nie jest na to wystarczająco duży.
Chciałbym usłyszeć porady dotyczące praktyki, konfiguracji i kontroli, jak temu zapobiec.
źródło
Odpowiedzi:
Jeśli robisz to często, zautomatyzuj to. A ponieważ oboje jesteście programistami, pisanie kodu powinno być w waszej sterówce. :) Poważnie ... ale automatyzując, możesz robić takie rzeczy jak:
I tak dalej. Ogranicza Cię tylko wyobraźnia.
źródło
Nie zgadzam się z założeniem pytania - chodzi o bezpieczeństwo - ale nie zgadzam się również z tym, że automatyzacja sama uratuje ten dzień. Zacznę od problemu:
Nie powinieneś być w stanie przypadkowo zrobić nic do produkcji!
Obejmuje to przypadkowe wykonywanie zautomatyzowanych czynności.
Mylisz bezpieczeństwo systemu z pojęciami typu „kto może robić co”. Twoje konta programistyczne powinny mieć możliwość zapisywania tylko na swoich kopiach, serwerze kontroli wersji i bazie danych deweloperów. Jeśli potrafią czytać / zapisywać dane produkcyjne, mogą zostać zhakowane i wykorzystane do kradzieży danych klientów lub (jak wykazano) mogą zostać przypisane do utraty danych klientów.
Musisz zacząć od uporządkowania przepływu pracy.
Twoje konta programistów powinny mieć możliwość zapisywania własnych kopii, kontroli wersji i być może przejścia z kontroli wersji do środowiska testowego.
Użytkownicy kopii zapasowych powinni mieć możliwość tylko odczytu z produkcji i zapisu w magazynie kopii zapasowych (który powinien być odpowiednio chroniony).
Wszelkie inne operacje odczytu / zapisu podczas produkcji powinny wymagać specjalnego i niewygodnego uwierzytelnienia. Nie powinieneś być w stanie wślizgnąć się w to ani zapomnieć, że jesteś zalogowany. Fizyczna kontrola dostępu jest tutaj przydatna. Karty inteligentne, przełączniki typu „uzbrajanie” konta, dostęp do dwóch klawiszy jednocześnie.
Dostęp do produkcji nie powinien być czymś, co trzeba robić każdego dnia. Większość pracy powinna odbywać się na platformie testowej, a wdrażanie poza godzinami pracy w produkcji po dokładnej analizie. Trochę niedogodności cię nie zabije.
Automatyzacja jest częścią rozwiązania.
Nie jestem ślepy na fakt, że pełne przetworzenie (przesyłanie do VCS, sprawdzanie zasięgu, pobieranie do serwera testowego, uruchamianie automatycznych testów, ponowne uwierzytelnianie, tworzenie kopii zapasowej, pobieranie z VCS) to długi proces.
Właśnie tam może pomóc automatyzacja, zgodnie z odpowiedzią Bena. Istnieje wiele różnych języków skryptowych, które znacznie ułatwiają wykonywanie niektórych zadań. Tylko upewnij się, że nie ułatwiasz robienia głupot. Twoje kroki związane z ponownym uwierzytelnieniem powinny być nadal wyraźne (a jeśli niebezpieczne), powinny być niewygodne i trudne do zrobienia bez zastanowienia.
Ale sama automatyzacja jest gorsza niż bezużyteczna. Pomoże ci to w popełnieniu większych błędów przy mniejszym przemyśleniu.
Odpowiedni dla zespołów każdej wielkości.
Zauważyłem, że wskazujesz wielkość swojego zespołu. Jestem jednym facetem i narażam się na to, ponieważ wypadek zajmuje tylko jedna osoba. Jest narzut, ale warto. W efekcie powstaje znacznie bezpieczniejsze i znacznie bardziej bezpieczne środowisko programistyczne i produkcyjne.
źródło
Jeden z moich współpracowników ma ciekawe podejście do tego. Jego terminalna kolorystyka produkcji jest niezrównana . Szary i różowy i trudny do odczytania, co teoretycznie ma zapewnić, że cokolwiek napisze, naprawdę zamierza napisać.
Twój przebieg może się różnić ... i prawdopodobnie nie muszę mówić, że sam w sobie nie jest kuloodporny. :)
źródło
Programiści nie powinni znać hasła do produkcyjnej bazy danych. Hasło prod powinno być losowe i niezapomniane - coś w rodzaju wyniku mashingu klawiatury (
Z^kC83N*(#$Hx
). Twoje hasło dev może być$YourDog'sName
lubcorrect horse battery staple
czy cokolwiek innego.Jasne, możesz dowiedzieć się, jakie jest hasło, zwłaszcza jeśli jesteś małym zespołem, patrząc na plik konfiguracyjny aplikacji klienta. To jedyne miejsce, w którym powinno istnieć hasło prod. To gwarantuje, że będziesz musiał podjąć celowy wysiłek, aby uzyskać hasło prod.
(Jak zawsze powinieneś mieć kopie zapasowe w punkcie czasowym dla produkcyjnej bazy danych. Na przykład w MySQL zarchiwizuj dzienniki binarne jako kopie przyrostowe. W przypadku PostgreSQL zarchiwizuj dzienniki z wyprzedzeniem. To jest twoja ostatnia szansa dla wszelkiego rodzaju katastrofy, samookaleczenia lub inne).
źródło
Krótka odpowiedź to RBAC - kontrola dostępu oparta na rolach.
Twoje uprawnienia do wszystkich środowisk muszą być różne - i tak denerwujące, jak rzeczy takie jak UAC, potrzebujesz ich: szczególnie w środowiskach PROD.
Jest NIGDY powód dla deweloperów mieć bezpośredni dostęp do prod - niezależnie od tego jak mała organizacja / zespół. Twój „Dev” może również nosić czapki „Stage” i „Prod”, ale musi mieć różne dane uwierzytelniające i procesy, aby trafić w różne środowiska.
Czy to denerwujące? Absolutnie. Ale czy to [pomaga] zapobiega rozbijaniu środowiska? Absolutnie.
źródło
Szybkie i proste rozwiązanie: użyj dwóch różnych kont użytkowników, jednego do normalnej pracy programistycznej, który ma dostęp tylko do bazy danych programowania, i innego do faktycznej pracy na produkcyjnej bazie danych, z pełnym dostępem do niej. W ten sposób będziesz musiał aktywnie zmienić konto, którego używasz, zanim będziesz mógł wprowadzić jakiekolwiek zmiany w produkcji, co powinno wystarczyć, aby zapobiec przypadkowym błędom.
To samo podejście można zastosować, jeśli masz dwie witryny lub dwa serwery lub dwa całe środowiska: jedno konto użytkownika do programowania bez dostępu (lub przynajmniej bez zapisu ) do produkcji, inne konto użytkownika do pracy w systemie produkcyjnym ( s).
Jest to to samo podejście, co administrator systemu posiadający standardowe konto nieadministracyjne do rutynowej pracy (czytanie wiadomości e-mail, surfowanie po Internecie, śledzenie biletów, ewidencja czasu pracy, pisanie dokumentacji itp.) Oraz odrębne konto pełnego administratora, z którego można korzystać podczas faktycznego działania na serwerach i / lub Active Directory.
źródło