Ile dostępu do bazy danych powinni mieć programiści? [Zamknięte]


16

Pracowałem więc w wielu różnych miejscach pracy jako programista i mój poziom dostępu do bazy danych był zróżnicowany. Zwykle nie mam dostępu do bazy danych produkcji.

Przez większość czasu mam dostęp do testowej bazy danych, ale jest różna. Czasami mogę zrobić i zmienić bazę danych i dane, jak mi się podoba, ale zwykle są inne ustalenia. Jakbym mógł mieć tylko dostęp do odczytu danych.

Pracowałem w jednym miejscu, w którym zespół DBA zarządzałby bazami danych, nie mogliśmy w ogóle wprowadzać zmian, chyba że prześlemy formularz ze skryptem SQL, aby „sprawdzili”. Zwykle nie miały wiele wspólnego z samym projektem, więc przez większość czasu wystarczyło nacisnąć F5.

Szczerze mówiąc, rozumiem, dlaczego prod musi zostać zablokowany, ale wolę mieć tyle samo dostępu do bazy danych w środowisku programistycznym i testowym. Myślę, że większość deweloperów ma wystarczającą wiedzę na temat bazy danych. Ale chciałbym usłyszeć opinie? Ile dostępu do bazy danych powinni mieć programiści? Czy można nam ufać, że niczego tam nie rozbijemy?


6
Prawdopodobnie chciałeś zapytać „Ile dostępu do produkcyjnej bazy danych powinni mieć programiści?”
Mayank

@Mayank Uderzyłeś w gwóźdź. Zawsze powinien istnieć serwer testowy do „zabawy” z nowymi koncepcjami. Serwer produkcyjny powinien widzieć tylko poprawione / przetestowane / sprawdzone wersje. Powiedziałbym to samo dla stron internetowych (nawet jeśli większość twórców stron internetowych z nich nie korzysta).
Evan Plaice,

@Mayank - Tak, chciałbym usłyszeć o dostępie do produkcyjnych baz danych, ale chciałbym również usłyszeć opinie na temat dostępu w różnych środowiskach, takich jak DEV, INT, TEST, PREPROD itp.
RoboShop

1
Chociaż zostało to oznaczone jako duplikat, powiązane pytanie programmers.stackexchange.com/questions/246618/... jest w rzeczywistości interesującym rozszerzeniem tego.
Eamon Nerbonne

Odpowiedzi:


16

Twórcy potrzebują dostępu do odczytu do wszystkich baz danych, w tym prod. Czasami problem polega na tym, że dane w Prod nie są tym, czego się spodziewali, i muszą zobaczyć dane, które powodują problem, ponieważ nie mogą odtworzyć ich w dev.

Deweloperzy nie powinni mieć uprawnień do zapisu danych produkcyjnych ani uprawnień do tworzenia obiektów. Nie powinno być nic, co nie byłoby częścią oficjalnego wydania. Zbyt wiele razy ludzie robią szybkie poprawki na prod, który albo nie działa, co powoduje, że prod jest jeszcze bardziej zepsuty lub działa, ale zapominają o umieszczeniu kodu na serwerach dev / QA / Staging i jeszcze gorzej w źródle kontroluj repozytorium, a kod zostanie nadpisany około miesiąc później w następnej oficjalnej wersji.

Wolę programistom mieć pełne prawa do kontroli jakości bazy danych, ponieważ wdrożenie na innym serwerze pomaga im sprawdzić, czy są jakieś luki w procesie wdrażania (oops zapomniałem, że zmieniłem tę tabelę, aby to zrobić i tak, i oops zapomniałem, że zrobiłem tę zmianę za pomocą GUI, a nie w skrypcie w kontroli źródła, w ten sposób muszą nastąpić zmiany strukturalne bazy danych).

Jeśli masz nowego klienta typu Enterprise, który będzie miał własny zestaw serwerów, uprawnienia mogą zostać złagodzone przed uruchomieniem. Wynika to z faktu, że tak wiele musi się wydarzyć, a kilka osób, które mogą to zrobić na prod, zostaje zaległych, a czasem nawet potrzebuje czasu wolnego. W szczególności ludzie, którzy importują dane z innego systemu, mogą zostać poproszeni o umieszczenie ich na prod przed uruchomieniem, jeśli ładowanie danych zajmie dużo czasu. Osoby te są zwykle specjalistami od danych i zapewnia wyższy poziom komfortu, umożliwiając im tymczasowy dostęp do produ niż przeciętny twórca aplikacji. Nie jest to luksus, który masz, gdy przechodzisz na już działający serwer produkcyjny.

Jedną z najważniejszych rzeczy w ograniczaniu praw do produkcji do bazy danych jest to, że twórcy muszą wtedy upewnić się, że ich praca jest w formie, którą może wdrożyć ktoś inny. To zazwyczaj poprawia jakość pracy, ponieważ nie próbują dokonywać poprawek w locie, ponieważ zapomnieli o czymś lub coś nie działało, ponieważ zrobili to inaczej na prod, niż naiwnie, polegając na samej pamięci. Tracicie także te „oops, przypadkowo usunąłem całą tabelę użytkowników, ponieważ zapomniałem wyróżnić przypadek typu„ klauzula where ”, gdy wdrożenia produkcyjne wykorzystują wyłącznie skrypty, które są uruchamiane jako całość, a nie jedno polecenie naraz, co jest typowe dla programistów uruchomić rzeczy na prod. Zespół z ograniczonymi prawami do baz danych prod jest bardziej skłonny do przechowywania zmian w bazie danych również w zakresie kontroli źródła.


1
+1 za komentarz dotyczący zapomnienia o objęciu kontroli źródła. Myślę, że bez względu na prawa dostępu i kto przeprowadza migrację do różnych środowisk, powinna ona być jak najbardziej zautomatyzowana, aby zapewnić, że wszystkie kompilacje są zbudowane z kodu kontroli źródła. Powinieneś postarać się jak najlepiej ograniczyć jakikolwiek proces, który wymaga samodzielnego przeniesienia na serwer, aby zadzierać z kodem lub bazą danych.
RoboShop,

8
„Twórcy potrzebują dostępu do odczytu do wszystkich baz danych, w tym prod”, jest co najmniej nie, przynajmniej w mojej poprzedniej pracy. Dane prod zawierają dane finansowe klientów i transakcje, które są poufne.
ohho,

3
@ohho, jest to prawidłowy wyjątek, ale musi sprawić, że naprawdę trudno będzie rozwiązać problem, którego nie można natychmiast odtworzyć w dev.
HLGEM

7

Dobrze jej tak naprawdę kwestia „Vampires (programistów) kontra Wilkołaki (Administratorzy systemów)” jako Jeff Atwood umieścił go tutaj .


Chyba Drużyna Edward.
Joel Etherton,

2
@Jel Etherton, dla tych z nas, którzy nie widzieli filmu, którym jest Team Edward?
CaffGeek

1
@Chad Dobrze, że tak naprawdę nie widziałeś tego gówna z „Zmierzchu”. Przynajmniej nie będziesz musiał udawać, że tego nie widziałeś, tak jak ja. ;)
Mayank

@Chad: Też nie widziałem filmów, ale Edward jest wampirem. Wiem, że z powodu ciągłego bombardowania jakiś czas temu reklamami Burger Kinga i niektórych głupich kampanii „kup nasze badziewie z całym rozmazanym Zmierzchem”. Soy un programador.
Joel Etherton,

och, wiem, że to dobrze, że tego nie widziałem. I nigdy tego nie zrobię.
CaffGeek,

7

Zwykle (oznacza to luksus konfigurowania pełnego środowiska) dostęp programisty do:

  • Serwer produkcyjny
    • Brak (SA / PM będzie ubiegać się o konfigurację schematu, użytkownik końcowy dostarczy dane inicjujące)
  • Serwer UAT
    • Brak (SA / PM będzie dotyczyć konfiguracji schematu i inicjowania danych przykładowych)
  • Serwer testowy / QA
    • Zwykle programista wysyła skrypt konfiguracji schematu do zespołu kontroli jakości, a kontrola jakości tworzy tabele
    • Programiści mają pełny dostęp do baz danych, ale rzadko go zmieniają
    • Programiści mogą pomóc współpracownikom ds. Kontroli jakości w seedowaniu / łataniu / usuwaniu niektórych danych
  • Serwer programistyczny / host lokalny
    • Pełny dostęp

Głównym powodem, dla którego programiści nie powinni dotykać serwerów produkcyjnych, jest: gdy coś pójdzie nie tak, zespół operacyjny jest odpowiedzialny, ale nie programiści.


2
Programiści są zawsze odpowiedzialni, nawet jeśli nie mogą dotknąć systemu, to oni go naprawiają.
Erin,

2
Jeśli poprawka jest zmianą w bazie danych, to zespół programistów jest odpowiedzialny za opracowanie poprawki, a on za nią. Ponadto ze względów higienicznych nie zezwalam programistom na „modyfikowanie” w jakikolwiek sposób (danych lub struktury) środowiska kontroli jakości. Wszelkie zmiany w tym środowisku powinny być tak samo kontrolowane jak środowisko produkcyjne.
Soronthar,

2
Jeśli masz zespół operacyjny ...
Marcie

Poprosiłbym o dostęp tylko do odczytu na serwerach produkcyjnych. Znacznie ułatwia znajdowanie błędów.
Carra,

@Carra: Może to mieć problemy regulacyjne, ponieważ serwery produkcyjne mogą mieć dane, które są prawnie regulowane (na przykład system medyczny w USA musi być zgodny z HIPAA). Nigdy nie byłem w miejscu, w którym ktoś próbował ograniczyć mój dostęp do poufnych danych na żywo, ale prawdopodobnie istnieją.
David Thornley,

2

Absolutne minimum potrzebne do wykonania pracy.

Jeśli wszyscy programiści otrzymają pełny dostęp do bazy danych, szansa, że ​​ktoś się zdenerwuje (lub upije, zostanie bardzo zmęczony lub ...) i wyrządzi poważne szkody, jest znacznie wyższa niż w przypadku, gdy może tylko czytać z bazy danych.

Jeśli twoją pracę można wykonać w większości bez dostępu do zapisu DB (a przez większość mam na myśli najwyżej kilka próśb o zmianę w tygodniu), to naprawdę nie potrzebujesz dostępu do zapisu.


2

Istnieją dwa konkurujące ze sobą pragnienia w każdym środowisku pracy.

  • Chęć zapewnienia ludziom dostępu, aby mogli samodzielnie rozwiązywać problemy. To pozwala im być szybkim i samoobsługowym.
  • Chęć ograniczenia i kontroli dostępu, aby zapobiec uszkodzeniu, przestojom lub utracie danych (celowo lub w inny sposób).

Częścią tego, co kształtuje równowagę, która jest osiągnięta (a przynajmniej powinna) jest oczekiwanie deweloperów. W każdej pracy, w której pracowałem, programiści mieli dostęp do wszystkiego, czego się spodziewali. Uzyskaj dostęp do systemu tylko wtedy, gdy wiesz, co robisz. Oznaczało to, że wiesz, co robisz zarówno z punktu widzenia programisty, jak i sysadmin. Jeśli nie byłeś pewien w żadnym z tych obszarów, nie miałeś żadnej firmy, która miałaby dostęp do systemów bez kogoś, kto by cię opiekował.

Podsumowując, jeśli nie wiesz, nie powinieneś mieć dostępu do żadnego systemu innego niż systemy deweloperów, które można łatwo zbudować . Jeśli wiesz, niż wiesz , nie powinieneś uzyskiwać dostępu do żadnego systemu, z wyjątkiem łatwo rozwijalnych systemów deweloperskich .


2

Programiści powinni mieć pełny dostęp do baz danych deweloperów (najlepiej powinni mieć lokalny serwer, ale nie zawsze jest to możliwe). Powinny mieć dostęp do bazy danych kompilacji / kontroli jakości, ale tylko do danych (należy uzyskać pozwolenie / przesłać bilet, aby zmienić strukturę). Programiści nigdy nie powinni mieć swobodnego dostępu do produkcyjnej bazy danych (chyba że jest to mała firma / projekt, a programiści również wspierają produkcję).


1

Myślę, że kluczem jest tutaj poziom odpowiedzialności programistów. W dużej organizacji z dużą liczbą programistów zapewne będą mieli dostęp do programowania z dostępem tylko do odczytu do kontroli jakości / testu.

Jednak w zespole programistycznym powinny znajdować się osoby z pełnym dostępem do wszystkich środowisk. Zazwyczaj jest to osoba odpowiedzialna za wprowadzanie poprawek itp. Chociaż jest to nieco ryzykowne, jest to kompromis między tym, jak bardzo ufasz programistom, jak szybko chcesz to naprawić, a ryzykiem związanym z zepsutym systemem lub ujawnieniem informacji w systemie. .

Pracowałem w dużym sklepie IT i dla większości osób mieliśmy dostęp do odczytu produkcji. Ja jako główny programista miałem również uprawnienia do produkcyjnej bazy danych. Nadal musiałem stosować się do tych samych wytycznych, co administratorzy systemów i DBA, jeśli chodzi o procesy i formalności, ale w razie potrzeby mogłem również dokonać pilnej naprawy.


0

Istnieje podobny problem, o którym większość z nas zapomina - nie jesteśmy jedynymi osobami korzystającymi z bazy danych! Mamy tendencję do przyjmowania tego za pewnik, ale nie powinniśmy. Nawet w małych witrynach ludzie biznesu mogą uruchamiać narzędzia innych firm w bazie danych do swoich raportów. Witryny korporacyjne prawie zawsze będą mieć wielu użytkowników tabel bazy danych, a „niewielka” zmiana może spowodować uszkodzenie ich aplikacji i odwrotnie.

To musi być pierwsze pytanie. Drugim musi być dostępny personel - pracowałem w miejscach, w których sysadmini chronili swoją trawę, ale tak naprawdę nie byli tak dobrzy. (Prawdopodobnie dlatego byli tak terytorialni - wiedzieli, że złapaliby dużo ciepła, gdyby ktoś się rozejrzał). Czasami musisz mieć większy dostęp, niż byś chciał.

Ale w idealnym świecie zgadzam się z uwagami innych ludzi. Nie chcę dostępu do danych na żywo, ponieważ, szczerze mówiąc, nie chcę odpowiedzialności. Pomyśl o tym - jeśli mam dostęp operacyjny i dojdzie do naruszenia, będę musiał spędzić dużo czasu, udowadniając, że nie mam z tym nic wspólnego. Być może będę musiał wykazać, że nie podszywałem danych z powodów osobistych itp. Wiele witryn traktuje prywatność bardzo poważnie, szczególnie. strony rządowe.

Nie chcę nawet dostępu do zapisu / administratora do systemu grupy testowej. Jeśli nie mogę nic zrobić w systemie produkcyjnym, to nie chcę tego robić w systemach testowych. Dostęp do odczytu jest wyjątkiem, ponieważ jest niezbędny, aby dowiedzieć się, co się dzieje.

Systemy rozwoju, zarówno indywidualne, jak i wydziałowe, to inna historia. Ale nawet tutaj, w praktyce, zwykle najlepiej jest uruchamiać wszystkie zmiany w bazie danych przez osobę punktową, zamiast zmuszać wszystkich do robienia własnych rzeczy.


0

Całkowicie zgadzam się z całą odpowiedzią, mówiąc: „jak najmniej uprawnień dla programistów baz danych prod”. Ale szczerze mówiąc, kto może odmówić programistom dostępu do bazy danych, jeśli chcą ją uzyskać. Przy wystarczającej liczbie (czy to kryminalnej, czy na dobre) uzyskają potrzebny dostęp.

Kto może powstrzymać ich przed wstawieniem do aplikacji prostego edytora SQL? W ten sposób mogą korzystać z bazy danych z uprawnieniami aplikacji. W większości przypadków to wszystko, czego potrzeba. Gdy baza danych jest skonfigurowana bezpiecznie, mogą nie mieć uprawnień do tworzenia lub usuwania obiektów, ale mają przynajmniej dostęp do odczytu i zapisu danych.

Już tu ludzie płaczą. Ale bądźmy szczerzy, nie masz pełnej kontroli nad aplikacją wdrożoną w środowisku produkcyjnym, chyba że sam ją napiszesz (i nawet wtedy nie myślisz o bibliotekach). I dla wszystkich programistów, jak już powiedziała Erin, jesteś odpowiedzialny za środowisko produkcyjne, nie tylko ludzi operacyjnych. Korzystaj więc mądrze ze swoich uprawnień.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.