Комментарии 376
Ну сами виноваты ж. продакшн доступы в дев-инструкии, чего они ждали то. ну и да, действительно, бекапы Шредингера. ну а джун, как по мне, ни в чем не виноват.
Но с тем, что джуна похвалить, а CTO на ковер — согласен)
В статье:
После запуска определённой команды я должен был скопировать URL/пароль/юзера базы данных из её вывода и настроить dev-окружение, указав там эту базу.Теоретически там могло вернуться что то в духе Test Test на машине Test. И тогда можно было бы насторожиться, что на руках имеется 2 разных рабочих креденшла. Один с пометкой Test, второй какой то Admin e4jm0dlwe9jvfje на машине production01.somecorp.com
Вот если бы он не грохнул базу, а пришел и сказал: «Кажется у вас креденшлы к продакшну в документации» — то однозначно похвалить
Тогда бы историю о его похвале никто бы не узнал )
ну а джун, как по мне, ни в чем не виноват.
Надо еще проверить, не диверсант ли это...
… ну а джун, как по мне, ни в чем не виноват.
его вина лишь в том, что… с такою кармой он пошел не в тестировщики
ожидание: джун выявил множество уязвимостей в тестируемых продуктах
реальность: джун стер базу данных фирмы вместе с бекапами
Там никого увольнять не надо — бизнес рассыпется, и все вылетят, а джун этому только поспособствовал как триггер нескольких уязвимостей.
С точки зрения техдира в данной ситуации действительно очень логично прикрыть себя, найти виноватого и отчитаться перед начальством об успешно принятых мерах.
Не думаю что это причина кого-то повышать, не вижу здесь заслуг junior'а, если бы он нашел и указал на это а не все выяснилось в результате ошибки, можно говорить о вознаграждении.
А вот разобраться почему доступ к проду не был защищен и более того креды попали в описание дев настройки нужно. Ну и соответственно потом делать выводы. Возможно это реально случайны косяк, хоть и серьезный, а возможно система.
Ну и ещё один, опытные сотрудники должны проводить ревью каждой задачи.
Ну и ещё один, в любой непонятной ситуации с бизнес логикой, спроси тех кто уже давно работает, все ли я понимаю правильно.
Хотя судя по тому что проброской эксепшенов отлавливают такие бизнес кейсы и не делают ревью и эти советы могут и не помоч.
Я разработчик, моя работа и моё время в сто раз важнее, чем цены на носки
Надо запомнить. Буду знать, что сказать начальству после случайного массапдейта в боевой БД.
Я правильно понял, что в инструкции для разработчиков была прописана команда, очищающая базу на проде?
В тестах, написано же
Мне дали документ с информацией о том, как настроить локальное окружение для разработки. Инструкции включают запуск маленького скрипта для создания личной копии БД с тестовыми данными.
Не, вот тут
Далее, как понимаю, тесты добавили ненастоящие данные и очистили существующие, то есть между запусками тестов все данные из БД в production были удалены
В инструкции стояли креды от продакшн-базы, и указание на тестовый скрипт, который надо запустить с выданными в другом месте кредами. Джун перепутал и вбил креды из инструкции. Тестовый скрипт, скорее всего, включал в себя drop database с совпадающим именем, либо вместе с кредами вбивалось и имя БД. Результат — дроп продакшн-базы.
Пришлось брать логи приложения и эмпирически восстанавливать статус. Два часа детективной работы. По крайней мере накладные за сегодня выправили. Потом восстановили бэкап в соседнюю базу данных и восстановили уже остальные.
Там после SQL апдейт можно было заметить, что многовато обновилось и не жать Commit.
Обошлось «без жертв», т.к. шкурой чувствуешь — апдейт должен отработать за пару секунд максимум, а тут второй десяток пошел, уже рефлекс на кнопку «стоп»
Ну и ошибки были, что приходилось из бекапов нужные куски данных тянуть. Правда пару раз за всю практику (тьфу-тьфу)
По сути, когда ВКЛЮЧЕН автокоммит, то каждый запрос выполняется в отдельной транзакции, которая коммитися сразу после выполнения запроса.
а потом остановить его — то все изменения откатятся, не будет такого что часть записей которые «успели» — будут обновлены, а часть — нет?
Даже без явно заданной транзакции большой апдейт можно остановить и все изменения, которые успели сделаться, будут отменены.
То есть, если написать 5 мелких апдейтов и одни большой, и запустить всё это на выполнение, есть шанс остановить без последствий
По MySQL не знаю как сейчас, 5 лет назад на таблицах, работающих на движке MyISAM (кажется так называется) "транзакция" была предельно "атомарна" — остановленный в процессе апдейт таки внёс бы изменения в часть колонок и не откатил их после остановки.
Впрочем это не касается транзакционного движка MySQL и других известных мне СУБД.
Если взять какой-нибудь Postgres либо Oracle, то там можно через специальные функции отменить идущий запрос (если он еще закончился и, соответственно, не случился commit).
Т.е.
1) увидели, что запрос подозрительно затянулся
2) перепроверили запрос и увидели ляп
3) запросили у базы список запросов и нашли проблемный
4) дали команду отменить запрос
5) запрос отменяется, транзакция отказытвается, попорченные данные так и не становятся видимы для всех остальных, кто работает с базой
Примечание: 3 и 4 требуют привелигированного доступа к базе.
Доступ к ней должен быть только у админа/девопса/релиз менеджера — того, кто отвечает за деплой на продакшен, кто делает бэкапы. И в идеале доступ выдается временно, под определенным тикетом.
Это конкретно прокол организации и соответственно тех.директора, которые не поставил нормально работу, не добился понимания того, что бэкапы есть и проверены, не добился того, что инструкции адекватные…
Да в общем, тут как-бы очевидно все. Вопрос в том, насколько бизнес поднимется, если у них вообще бэкапов нет (нонсенс просто).
Главное что б руководитель ушёл «по статье», если у них такое там есть.
Я так понял, скрипт снимал бэкап прода и разворачивал на локальной машине. Проблема в том, что доступ был не только на чтение :)
Судя по описанию, скрипт создавал БД и заполнял её тестовыми данными.
Второй скрипт убивал все данные в БД и заполнял их тестовыми значениями.
Джун должен был запускать второй скрипт с теми конфигами, что нагенерировал первый, но он запустил его с данными production базы.
Не буду писать какая именно из СУБД, но при переполнении тома коцает базу. Естественно, ни в один лог не пишется, что место кончилось, да и вообще в логах ничего о проблеме нет. После этого у пользователей начинаются странности. То интерфейс не грузится, то грузится, но в какие-то моменты выпадает… Естественно, первая реакция саппорта на сообщения о проблемах — а давайте включим ведение подробных логов! Сразу после этого база убивается вообще до невосстановимого состояния. Единственный вариант — полностью восстановить базу и СУБД из бэкапа. Если он сделан до того, как СУБД покоцала базу… Самое смешное, что, кажется, на СХД даже было настроено автоувеличение объема тома по мере необходимости, но почему-то не сработало.
Плюс к этому — отсутствие живых бэкапов.
А исходная первопричина багов в софте — разработчики СУБД не тестировали СУБД в условиях недостатка места. Просто не пришло в голову, что у кого-то может переполниться том с боевой базой.
В описанной в топике истории — наложение трех багов в wetware: первый баг — автор документации забыл поменять в тексте после копипаста логин пароль боевой базы, второй — никто не догадался поменять логин-пароль боевой базы перед запуском в продакшн.
Баг номер три — джун после учебы натаскан вбивать примеры из учебника как есть не включая мозг. А уже потом разбираться, если вдруг что-то не заработает.
А исходная первопричина багов в софте — разработчики СУБД не тестировали СУБД в условиях недостатка места
Что-то самописное?
Тут забавное сочетание обстоятельств — проблема возникает из-за невозможности из линукса точно узнать объем свободного места
Видимо то вы просто не умеете его готовить. Заббикс, например, из коробки мне вкинул темплейт: Discovered by
Mounted filesystem discovery, и по всем линуксово-аиксовым серверам показывает графики и алертит, если меньше 20%, 10%, 2% (с разным "приоритетом") свободного места. На рабочей машине скрипт, который смотрит все примаунченые файловые системы, и раз в 5 минут алертит через notify-send если занято более 90%. Короче не вижу "невозможности из линукса точно узнать объем свободного места".
Возможно имеется ввиду, что бд внутри себя создает какой-то виртуальный том, но это изврат, как мне кажется.
Как там было на баше в свое время: … старкон2, запущенный в DosBox, под иксами в Дебиане, который запущен в VMWare, которая в WinXP
Куда мне вопрос о неработающем звуке задавать? ...
ну не знаю, ребят. У меня блейды с red hat мастер-машинами, на которых kvm'ные редхаты крутят оракл энтерпрайс, и ibm'ные машины, на которых aix'ы крутят оракл энтерпрайс. И везде с hitachi схд выделены диски.
Но я не вижу таких проблем, как вы описываете. Может быть с этим столкнулись люди, которые настраивали всю инфраструктуру, но при развертывании новых бд я тоже не вижу таких проблем. Более того, в реальном времени мониторится как наличие свободного места на дисках (под арклоги, в основном), так и свободное место в tablespaces внутри оракла.
Наверное, вы просто что-то не так сделали… или не дочитали.
Соответствие набора инструкций требованиям дает только теоретическую возможность. Инструкции виртуализации же надо еще правильно эмулировать в самой виртуальной машине — а это мало кому интересно.
Если это исправили (а могли — я довольно давно не смотрел), то можно вкладывать хоть 10 уровней (если памяти/скорости процессора хватит), если нет — то только три…
Только это ни разу не линукса проблема, это на уровне БД такое веселье…
и сразу вспомнился один ну очень бородатый анекдот:
— Расскажите о себе
— Могу копать, ну правда херово, могу не копать, в этом разбираюсь чуть лучше, могу сделать так что бы другой копал — с этим справляюсь на ура!
— Поздравляю с назначением на должность технического директора!
Напишите уж пожалуйста, что это за СУБД, это же царь-баг!
(если действительно так интересно — пишите в личку)
Реальность — она вообще бредовей любой выдумки.
Вот это вот, например: http://kris-reid.livejournal.com/150232.html
Ну и маленький эпизод оттуда:
«вспомнилось: «Сидит Слава Логинов, пишет сельскохозяйственную фантастику. Мучается творчеством. Рядом сидит Женя Лукин. Логинов задумывается, отрываеться от работы и говорит...:
— У меня тут в рассказе есть один тракторист, который постоянно по пьянке трактора в речке топит. Hикак не могу решить, сколько же он их утопил. Два — вроде мало, три — не поверит никто…
— Да — говорит Женя. — Задачка… А на самом деле сколько он их утопил?
Логинов тяжело вздохнул.
— Одиннадцать… „
И обязательно с комментарием lemming_drover ( отсюда ):.»Это апокриф. Я как-то раз спросил Логинова о том трактористе. Так вот, во-первых, не все его трактора утонули, некоторые погибли иной смертью…
Во-вторых, загубленных тракторов было _четырнадцать _!!! «;)
Так что это в жизни может случиться что угодно, а в книгах все должно быть логичным;))“
Еще можно перепутать консоли и удалить постгрес в дебиане через --purge, хорошо что была реплика в стандалоне
Если у джуниоров есть доступ к продакшену, то, на самом деле, два варианта. Либо в компании все очень плохо, либо, наоборот, все очень хорошо — все зарезервировано и автоматизировано так, что ничего страшного не случится.
Вопрос — зачем джуниору доступ в продакшн?
Например, расследовать инциденты с прода или баги, воспроизводящиеся только на проде.
Тогда вполне разумно дать, например, ридонли доступ.
Это помимо того, что сомневаюсь в компетенции джуниоров вообще что-то расследовать на продакшне (хотя джуниор джуниору рознь, конечно). Меня просто дико коробит связь «джуниор-продакшн», при любой аргументации.
Некоторые баги воспроизводятся только при реальной нагрузке, эмулятор которой еще никто не писал, а баг ловить надо сейчас. На текущей работе, когда я только устроился несколько лет назад, очень жутко было осматриваться и обживаться на прод-сервере с боевой базой. Но деваться было некуда и спустя время стало понятно, что не от хорошей жизни оно так устроено, а как компромисс между затратами и эффективностью
Я же не голосую за всеобщую работу на проде и без QA. Просто есть ситуации и состояния бизнеса, когда приходится джуна пускать в огород. В моем случае, правда, прочитали 10 лекций, 5 раз напугали и 1 раз предупредили: "нет однозначного понимания — Enter не трогать"
Инциденты непосредственно на продакшене в первый день работы джуниор девелопером никто не расследует.
зачем джуниору доступ в продакшн?
При чем тут первый день? Или во второй день он уже не джуниор?
В компаниях, которых я работал и работаю, так повелось, что баги исправляют разработчики, а не L3 саппорт / QA / бизнес аналитик (если они вообще есть в компании).
Если данные такие важные — то доступ должен быть соответственным.
Только пришедший джуниор же, еще хорошо если просто разбирается с языком программирования и технологиями, но с разрабатываемым продуктом он не знаком, и инвестигировать проблемы, не зная как работает проект — он не может по определению.
Вопрос — зачем джуниору доступ в продакшн? В любой здоровой (от слово здоровье) компании сиди и разрабатывай локально у себя на машине.
И не относится к случаю в статье.
У netflix-а есть Chaos Monkeys — специально, чтобы все ломалось регулярно, а система выдерживала, если не выдерживает — делают так, чтобы выдерживала.
Чем джуниор не Chaos Monkey? ;)
Если есть доступы на изменение данных это уже плохо. У вас какой то парадокс получается.)
Но даже если предположить что все легко восстановимо, то за чем это? К тому же случайные небольшие изменения можно не заметить, и как вы их потом будите отлавливать и фиксить не понятно, а они будут втихую портить кому-то жизнь ухудшая качестве продукта.
Вы забываете что это не у него был доступ, а у любого кто может почитать доки. У секретарши, например. То есть дела там еще хуже.
Довольно очевидный вопрос. Джуниор ни в чём не виноват — он по определению не должен иметь доступ к продуктовой базе. Более того, желательно, чтобы у него даже доступа в сеть с продуктовой средой не было. Так что к нему вообще никаких вопросов.
Ответственный за бэкапы — да, облажался. Но это со всеми бывает. Дорогостоящее обучение, да. Выговор, но не более.
А технический директор — просто редкостно некомпетентный идиот, раз он сделал такие выводы. И на своём месте принесёт больше вреда, чем пользы. Так что в расход без сожалений.
В случае если в базу все-таки надо влезть, для девелоперов должны быть специальные учетные записи(breakglass account), пароли к которым генерируются когда этот доступ нужен. Пароль действителен в течении нескольких часов.
То есть бэкапы не работают, а он просто немного облажался?
Отсюда с дивана конечно картина целиком не видна, но просто наличие каких-то там файлов с расширением .bkp, .rar или .rman еще не означает, что это именно бэкапы, и что в них хранится именно то, что нужно для восстановления, так что выговор — это недостаточно.
И вообще, приходите вы в новую компанию — откуда вы знаете, что на srvxp1 находится продакшен? Вам инструкцию же дали. Тут любого уровня специалист мог бы промахнуться.
Самое печальное, что парню теперь будет тяжеловато устроится, хотя по факту он реально не причем.Тестером пойти, оторвут с руками:)
И на самом деле это самый обычный косяк джуниора — он случайно взял не те данные, да, бывает, поэтому он и джуниор, все его действия даже при вываливании в дев должны проверяться.
Реально накосячили те, кто а) прописал продакшен пароли в инструкцию б) дал продакшен пароли джуниору
Докапываться до джуниора в данном случае это все равно что уборщицу на атомной станции наказывать за расплавившиеся стержни, потому что она вставила свою карточку доступа не в тот терминал.
указанные там значения — от базы данных в production (не знаю, почему они задокументированы в инструкции по настройке dev-окружения)
Ну, собсна, а чего они хотели?) Согласен с комментаторами выше, тех.дир. тут больше виноват. Парня жаль, конечно.
Дураки-с ©
Пацан прошел бы хорошую подготовку при восстановлении удаленного и скорее всего стал бы одним из преданных сотрудников компании.Какую подготовку пройдёт Software Developer при восстановлении базы данных? Если только моральную :)
Там работа для админов или операторов ЭВМ — заново вбивать все данные.
Технического директора увольнять не следует — кому-то же надо всё восстанавливать, да и обучение нового потребует времени и денег, но ущерб с него надо взыскать, весь или частично.
Ответственного за бэкапы наказать в соответствии со степенью ответственности — если это какой-то рядовой сотрудник, то можно премии лишить там, но увольнять-то за что? Увольнять если, то его начальника, который не озаботился проверкой бэкапов.
Сотрудник который может сломать всё в первый же день — очень ценный сотрудник. Указывает на потенциальные проблемы.
Кто и зачем будет обучать технического директора? Это c-level должность.
Сотрудник который может сломать всё в первый же день — очень ценный сотрудник. Указывает на потенциальные проблемы.Там смайлик был, но многие этого не заметили. Боюсь, что следующий комментарий я смогу оставить только через час :)
Это c-level должность.Люди на c-level-должности изначально знают все бизнес-процессы, системный ландшафт и IT-процессы во всех компаниях или способны мгновенно вступить в должность и ознакомиться со всей структурой компании?
Вероятно, их нет. И даже админов (настоящих админов), вероятно, тоже нет.
«EDIT Just to make it even more embarrassing, i just realized that i took the laptop i was issued home with me (i have no idea why i did this at all).»
Безопасников видимо совсем нет, раз уволенный (или недопринятый) джуниор в первый день работы смог вдобавок свободно унести корпоративный ноутбук с работы =)
Тут не особо давно проскакивали посты о том, что злоумышленники насканили инстансов монги с террабайтами продакшн данных, не защищённых паролем, и зашифровали/удалили. Что уж удивляться, что у кого-то пароли от продакшена в инструкции напечатаны.
Я практически уверен, что выиграть подобное дело на стороне джуниор-разработчика будет не проблема, зато огласка такого дела возможно заставит подобных тех.директоров подумать что не везде можно прикрыться подчиненными.
Учитывая то, что по факту джун совершил совершенно рядовой косяк, увольнение за это скорее всего оверкилл (хотя хз конечно что у них там в контрактах), поэтому можно судиться за восстановление на работе как минимум.
Но за необоснованное увольнение вздрючат только так, а тут пахнет как раз этим вариантом.
она растолстела и более не привлекательна для клиентов
Очевидная потеря квалификации же.
Есть некоторое лицемерие в том, чтобы сначала запрещать компаниям указывать реальные требования в должностной инструкции и вакансии (предположим: «стройная, внешне привлекательная по оценке компании молодая женщина»), а потом судами навязывать неэффективного работника, так как формальных оснований в должностной нет.
Да с тестами есть такой опасный нюанс, но всё же оставлять удалёный доступ к прод. бд такое себе ) Наверное это их первый случай, у меня на локалке было подобное где не страшно.
Опишу свой случай. Сам устроился на мою первую практику в универе "кодить" особо было нечего и мне дали отремонтировать камеру дорогущую, и запитать через (стабилизатор я так понял) и подключить к серверу. Показал директору он всё проверил, сказал "красавчик после обеда вместе доделаем".
И знаете что было после обеда ребята? Серверная горела! Матерясь директор повыдёргивал питание и потушили всё дело, благо только сетевой фильтр успел больше всех пострадать (но огонь был, хоть и немного). Директор сказал, что это наша вместе вина, выдал мне 1500р. я пошёл купил новый стабилизатор и потом ещё много с ним дел вместе переделывали и вообще крутой мужик оказался )
Мораль такова, что старший товарищ всегда отвечает. И да, не доверяйте предохранителям иногда они просто не работают и техника уже горит !
А так взрываются кондёры. А еще дым от них вреден для здоровья, потому закачиваем лекциюНе выговоров, ни доносов, ни прессования со стороны коллег, а только грамотный подзатыльник :)
Доступ к подсистемам прода — только через CI/CD. И проблемы бы не существовало.
Бекапы шрёдингера — это классика :-)
А если уж и хранить базу то как минимум система Артифактори.
Зона ответственности по настройке тех.процессов лежит на тех.дире! Не хочет этим заниматься, то пусть уступит более компетентному товарищу. Это он был поинтересоваться у подчиненных:
* настроен ли процесс бэкапа?
* Как часто делается бэкап?
* Проверена ли процедура восстановления?
* Сможет ли кто-то еще восстановить из бэкапа не считая его создавшего?
* Описана ли процедура по созданию\восстановлению из бэкапа?
Это минимальный набор того, что он должен был взять под свой контроль.
Если кого и увольнять в этой истории, то только тех.дира!
На мой взгляд, в вариантах ответа на вопрос кого увольнять в такой ситуации не хватает эйчаров или кто там занимается приёмом на работу.
Это ж идеальный тестировщик! С первого раза, в первый же день найти даже не уязвимость, а дырищу в разработке! Талант, не побоюсь этого слова. Пропустить такое дарование надо постараться...
Написали скрипт судного дня и дали его джуниору.
Приняли инструкцию по настройке прод и дев сред. Но потом возникла потребность в поднятии тестовой среды. Поднимали ее на основе дев среды. Но там была опечатка. И данные (при миграции) лились в прод. Благо это были всего на всего справочники.
что за бред
Бакапы должны делаться ежедневно и ежедневно восстанавливаться в копию рабочей базы, так называемая копия вчерашнего дня.
сложно судить возможно ли у них это.
Человек наверняка делал то о чем его просили.
Очень много вопросов возникает…
1. Почему у джуна доступы к боевой среде. Ее обычно берегут оберегают всеми способами.
2. То что в инструкции не ДЕВ, не ново… Такое иногда бывает. Камень нужно кинуть в того кто ставил задачу, а не в исполнителя. От куда ему знать было.
Они должны храниться зашифрованноми и доступ к ним сугубо согласно политике ИБ компании.
2.Какого черта с IP адреса джуниора вообще имеется доступ к продакшн базе?
Прод база даже пинговаться не должна.
3.Почему не изолирована команда DROP DATABASE?
Ну а в данной ситуации вина, бэкапера, так как бекапов не было и они не восстанавливаются. Делать разностные бэкапы никто не мешает, хоть каждый час… Правда, если место позволяет. Другое дело. Что человека уволили за то, что он обнаружил(обнажил) дыру в безопастности, и протестировал систему бэкапов на вшивость. QA — минимум, плюс премия за квартал досрочно в двукратном размере.
Директора лишить 30% гонорара, и обязать работать в ручном режиме для восстановления, а в помощь ему ответственных за бэкапов.
Зачем кого-то увольнять… Да потеря данных, да важная информация. Но урок полезный раз. Убытки, два… Зато системы NAS и тому подобное для всех вариниантов бэкапов будут. И ещё 100500 раз переспросят относительно того, что сделались у нас резервные?
- Доступ к production среде без VPN'a или общий доступ и к dev среде и к production? Раздели это!
- Учетная запись с доступом для к БД у разработчика? И не важно в инструкции она или где. Не должно быть доступа к БД вообще. Автоматизируй это!
— CTO (составил потенциально опасную / недостаточно понятную документацию )
— team lead (не добавил «защиту» от дурака, которая не позволила бы выполнить потенциально опасные процедуры на production instance, не провел достаточный инструктаж / не проконтролировал как новичок осуществляет local deployment приложения)
— DevOps (не обеспечил своевременное резервирование системы, оставил возможность коннекта к продакшн базе с машины любого дева)
ну а вообще согласно здравому смыслу админ который допустил доступ к прод базе откуда угодно своей должности не заслуживает
это как пожарник который с попкорном наблюдает за горящим домом и ничего не делает
или переговорщик с террористами который говорит «убивайте хоть всех мне все равно»
Еще 7.7 была жива и относительно популярна. Пришел, написал какую-то обработку, все работает.
Только вышел из кабинета, выбегает бухгалтер и грозно просит назад, потому что «все в номенклатуре сломалось».
Оказалось, что она просто случайно нажала кнопку «Отключить иерархический просмотр» (или как там) и, видимо, сделала это впервые в жизни, поэтому сильно испугалась, увидев, что папочек больше нет. В итоге, показал как вернуть все обратно, но потом через другого специалиста попросили, чтоб я туда больше не приезжал, хотя обработка работала нормально.
Они же бухгалтерский учёт учили 5 лет. Целых 5 лет Карл!!!
А больше всего гонору — это как раз у тех, которые 5 лет отсидели и всё благополучно забыли, работают, фактически, операторами ЭВМ, понятия не имеют ни о компьютерах, ни о, собственно, бухгалетрии (всё что они умеют — вводить данные в формы, разработанные кем-то другим), но при этом «дуют щёки» невероятно…
Я видел в книжном магазине учебник по бухучёту под названием «Бухгалтерский учёт за 7 дней», за 10 дней и за 14 дней. Сам я проходил курсы 3 месяца по два занятия в неделю по 2 часа, хотя можно было просто прочитать учебник за несколько дней, причём в учебнике конечно всё подробнее написано.
Я видел книгу «C++ за 21 день». Это о чем-то должно говорить? Чтобы быть бухгалтером уровня главбуха большого холдинга надо знать очень хорошо: ПБУ, НК, частично ГК, частично ТК, хорошо МСФО, следить за многими регулирующими ФЗ, письмами минфина, наголовой и кучей всего остального. И все это с риском уголовной ответственности при косяках с налогами.
«стандартный бухгалтерский учет» — это типовые "приход", "расход", которые разносятся типовыми проводками описанными в куче учебников. В принципе многим хватает на начальном этапе или при небольшом обороте...
Ну а потом либо компания растет и выходит за пределы «стандартного бухгалтерского учета» и начинаются "налоговые и бухгалтерские оптимизации" с использованием различных особенностей законодательства и учета, либо компания закрывается...
И такие бухгалтера, и такие администраторы с программистами где-то востребованы. Но какое они имеют отношение к настоящим высококвалифицированным специалистам?
Ну теоретически они могут дорасти до высококлассных специалистов… :)
но это маловероятно, т.к. в большинстве случае такие "спецы" не могут учится… любой нестандартный вопрос вводит их в ступор или словесное недержание без смысла… Но понтов у таких бухгалтеров выше крыши…
Я просил и умолял позволить мне как-то помочь реабилитироваться
Его просьбы остаться можно объяснить только его неопытностью. Оттуда нужно бежать роняя тапки, ничему хорошему там не научат. Допустим с бекапами многие грешат, для этого нужно сделать какие то усилия, потратить время, как минимум до первой потери данных, руки могут не дойти ;) Но как можно в инструкции напечатать пароль от production? Это каким нужно быть клоуном, рыжим или белым?
Было подозрение на то, что начал сыпаться винт (в дальнейшем подтвердилось по индивидуальному снятию SMART-а в обход RAID контроллера).
Так вот, времени было мало, дело было вечером, перед поездом. Несмотря на развал RAID-а БД удалось успешно скопировать. Посоветовал местным админам прогнать тестирование БД средствами самой 1С без исправления (не ТИС).
Прогнали, все ок, засунули БД в другой сервер, взлетели…
А через трое суток прилетает гневный звонок главбуха с того завода — «Зачем вы нам своими советами базу 1С сломали?»
Начали разбираться. Оказалось, что за последние 5 лет местный франч 1С эту БД каждый год усекал, но без компенсации движений по регистрам и бухсчетам. Причем контрольное тестирование БД не проводилось НИ РАЗУ. Хотя в договоре было прописано, что подрядчик несет ответственность за целостность данных в результате проведения обновлений, доработок и прочих манипуляций.
Даже при «чистом» тестировании 7-я 1С-ка в обязательном порядке все же пересчитывает промежуточные итоги. С закономерным результатом.
Ну а заводские бухи три дня стучали данными в базу, пока не заметили что что-то там по остаткам не сходится…
Ругань. Мат. Написание объяснительных. Вызов стороннего известного франча 1С для экспертной оценки.
Наказание невиновных и награждение непричастных. Занавес.
- Слишком много ждут от человеческих обезъян, можно сказать что совершение ошибок заложены в них by design;
- Ответ на вопрос «кто действительно виноват» был дан тут:
указанные там значения — от базы данных в production (не знаю, почему они задокументированы в инструкции по настройке dev-окружения)
- Увольнять никого не надо, это бы противоречило пт. 1, а тех. директору надо меньше рефлексировать, глубже изучать истоки проблем и наконец осознать склонность людей к совершению ошибок, пусть книжек там почитает о работе мозга и когнитивных искажениях.
Стояла очень кучерявая учетная система, написанная на дельфях и в качестве СУБД пользующая конечно же Firebird.
Система работала почти круглосуточно в режиме онлайн, крутилось куча разных скриптов-роботов для автоматизации ряда операций.
Из-за этого, а также из-за криворукости не то разработчиков системы, не то Firebird-а (подозреваю что там был коллективный «путь к успеху» в этом вопросе), резервное копирование выполнялось каждую ночь скриптом, писанным в системе Automate. Скрипт солидный, в несколько страниц мелкого текста. Рубились/запускались роботы, стопалась/стартовала СУБД и т.д. Automate там был вынужденной мерой, т.к. в целях автоматизации этих процессов требовалось ловить окна и жать в них кнопки.
А каждые выходные из-за дури со сбором мусора в FB 1.5 Classic требовалось сделать т.наз. бекап-роллбек. Иначе база всего за неделю выростала до гигантских размеров (в 2-3 раза от свежеразвернутого с бекапа номинала) и все начинало тормозить. Литература по FB (единственная имеющаяся на русском книжка Хелен Бори) и их офсайт были вычитаны полностью, всякие хитрости типа бекапа со свипом по БД переведенной в однопользовательский режим и попытка подстройки мусорщика — результатов упорно не давали.
Короче полная дичь.
Так вот, в один прекрасный день что-то в мозгах Automate-а помутилось и он пропустил с ошибками ряд команд своего скрипта и развернул из бекапа не последнюю версию, а на сутки ранее. А свежий бекап просто грохнул.
В итоге сутки работы довольно немаленького дистрибьюторского предприятия были потеряны полностью.
По факту были сделаны оргвыводы.
Automate был быстро, решительно выкинут на мороз. А все телодвижения были переписаны чуть более чем полностью на новомодном тогда powershell 2.0. С кучей проверок на каждом этапе, промежуточных резервных копий, логов и прочих уровней безопасности.
> были переписаны чуть более чем полностью на новомодном тогда powershell 2.0.
Позволю себе глупый вопрос: как?
Мне объяснили момент, что в инструкциях не должно быть живых данных ну и необидно поржали.
А по ситуации могло быть такое, что основной показатель искупления FUCKUP-ов — расстрел виновных, директор доложил наверх, что виновные расстреляны и его не ругали)))
В любом случае, парню сплошной профит, будет знать, где лежат эти грабли.
Ну а зачем директору оправдываться за работу через одно место. Видать таких сотрудников нанимают, которым пофиг, есть бэкапы или нет их, и это проявляется во всем.
Результат — терабайт с лишним удалённой бизнес-информации в 6 утра в субботу, и трёхдневное колдовство с бэкапами.
И огромное спасибо коллегам и руководству, которые с пониманием отнеслись к произошедшему (функция так себя не должна была вести, её в итоге поправили) и всё обошлось без особых последствий.
Так что я этого разработчика очень даже понимаю, да…
Вот это — всем багам баг.
Правда, на моей стороне тоже была ошибка, из-за которой NULL и получил — неверно сделал JOIN в запросе… Да. Sad, but true…
Вставлю и свои 5 копеек. Состою в тестерах в проекте LIF ММО, ждали тестов функции судного часа, все хорошо, перед началом плановая перезагрузка всех серверов, и загрузившись обнаруживаем что все монументы (которые ответственны за область территории, объявленной в собственность) — исчезли! Все постройки на всех серверах стали ничейными и все объекты тоже. При разборе выяснили, что один из глав кланов не делал делегирование на заместителей, а сделал таким же полноправным главой еще одного человека. В итоге функция обрабатывающая эти данные не знала что с этим делать, и как следствие удалила из базы все монументы (через которые и происходит управление). Вот так недочет в одной функции порушил всю базу. Потом бэкапы, восстановление,… эх.
до того, как писать апдейты в стиле
update t set f = value
--select t.*
from mytable t
where 1 = 1
and --всякие фильтры
я писал их в стиле
update mytable set f = value
--select t.*
from mytable t
where 1 = 1
and --всякие фильтры
и как-то не закомментил вторую строку и запустил на выполнение.
Т.е. всю таблицу проапдейтил (вдруг кто не догадался).
begin tran
update…
запускаем, смотрим. Пугаемся. Делаем rollback. Выдыхаем.
А я обхожусь тем же запросом, но он сразу в двух вариантах (один для проверки, второй для действия):
select*,
--update a set
field=100500
from dbo.objects as a
where id=1;
Если запустить весь запрос, то будет выполнен select, а если ручками выделить кусок, начиная с update и до конца, то соответственно будет выполнен этот update. В противном случае надо писать два отдельных запроса (или первоначальный select переделывать в update). begin tran тогда надо всовывать в начало комментария перед update.До сих пор вспоминаю как вместо rm ./cache/ -rf ввёл что-то вроде rm ./ и отправил в девнул все гигабайты фотографий с крупного сайта. Вернее отправил то весь вебрут, но скрипты и стили тут же восстановил из репозитория. Потом стал искать бэкапы. Нашёл бэкапы бд, кода и ещё кучу всего. А вот гигабайты фотографий то нигде не бэкапились. Но никто не узнал, что это был я . Даже не знаю почему веб-студия та вскоре обанкротилась и так и не выплатила работникам последнюю зарплату.
Минимум дважды за свою жизнь видел похожие случаи, оба раза были сделаны выводы об организации процесса но никого не уволили. Кстати, по крайней мере в одном из них тот самый джуниор через пару лет стал вполне адекватным и ценным сотрудником.
Директор наверно и писал эту инструкцию, раз так отреагировал, джиниор молодец, сразу сломал прод, карьера будущего хакера в гору пошла. Его тестером надо брать!
В продакшене вбил
chown -R www-data /var /www
Первым упал Postgres :). Благо была копия виртуалки и по ней восстановил права и все работало как обычно. Но тогда кирпичей отложил знатно. И да, меня за это не уволили и даже не гнали.
Тот драйв заставил делать меня бэкапы баз и регулярно, и перед каждым чихом, и проверять их работоспособность. Правда делать бэкапы личных данных я научился, когда
Ну, у вас-то все было не настолько безнадежно :-)
Скорее всего сама команда разработки, где, наверное не один человек, виновата. А еще точнее — начальник отдела, человек ответственный за инструкции, человек ответственный за архитектуру, ну и за бекапы. Косячнули все. У нас был похожий случай, потерялся правда всего день работы, зато рестор теперь тщательно тестируется для каждого бекапа автоматом.
А парень мог быть внимательнее, но не был, бывает. Насколько он виноват, это надо знать всю историю не в пересказе, а по секундам. Epic fail команды это не отменяет.
1. Почему доступ к продакшну валяется в почти свободно распространяемых документах?
2. Почему в базу продакшна можно просто взять и подключится из окружения разработчика?
Ведь джун, фактически ученик. Который работает почти задаром. Но компания его взращивает так, как им нужно. Если просто набирать людей с опытом… Правильно ли это?
Рыба гниет с головы.
Обычно когда приходит новый человек, совершаются некоторые действия:
1) Согласование доступов СБ.(В этот момент руководитель высылает описание архитектуры всех сред)
Если СБ не выдавало доступов, то на мой Взгляд Виновата служба безопасности.
Если Руководитель не выслал описание сред, то вина руководителя
Если же человеку все дали, но он решил «показать себя», то что же… Вина однозначно джуна.
2) Вводная — Обычно человека знакомят что используется в компании. И карта проекта. Какие базы где лежат и как к ним стучаться.
Если вводной нету, то опять же вина руководителя. Ну или Тим лида.
Если же Джун ее пропустил. То его.
Эти два пункта статье не описаны. И на мой взгляд это какой то подводный камень.
Скопирую сюда, т.к. по ссылкам обычно ходить лень:
Тянет на отдельный пост, но у меня была похожая история три года назад — я убил базу и многомиллионный бизнес почти накрылся. Причем считаю, что идиоты они, а не я — при организации компании как 10+ менеджеров и один программист/админ этого следовало ожидать рано или поздно.
В общем, есть некая баннерная сеть (сейчас проверил — еще жива), а у нее ушел единственный программист — у них полный ахтунг, попросили через знакомых меня помочь (само собой, без договора и всего такого). Начал разбираться — не документировано вообще ни чего, даны только исходники системыи логин-пасс от дедика. Соответственно, моей задачей было именно разобраться и задокументировать что и как для новых программистов.
Поковырял исходники, полез смотреть в бд. Работал ночью, был упорот, перепутал две одинаковые вкладки phpmyadmin и сделал из продакшен-базы тестовую базу. Жопу обнаружил только когда запустил на продакшене mysqldump и понял, что он как-то быстро завершился.
Побежал за бекапами — а их нет. Пишу в скайп старому программисту с вопросом «Куда делаются бекапы?», он ответил, что вообще не парился с этим, они не предусмотрены, и ему вообще плевать.
Понял, насколько случилась жопа, когда у них на утро встал бизнес и мне позвонили и сказали: «Мы знаем, что у тебя есть квартира — продавай и возмещай.»
Мне чудом повезло, что они использовали стороннюю SAAS систему подсчета кликов/лидов, из которой я сумел вытащить данные за последний месяц. Они потеряли бд за несколько лет, но их волновал только последний месяц и от меня отстали.
Я тогда чуть не поседел, после чего решил уйти из веб-разработки (7 лет опыта на стартапах и хайлоаде к тому моменту) и сделать из хобби работу (3д-графика) — нервы целее будут.
Пару месяцев назад тут тоже была веселая история с кастомной рендер-фермой, но это уже другая история и все решилось намного менее нервно. Но теперь я знаю, что в области 3д влететь на стоимость хаты тоже можно (не влетел).
само собой, без договора и всего такого
Мы знаем, что у тебя есть квартира — продавай и возмещай— Ребят, а вы кто такие? Не делал я ничего, да и в компьютерах не шарю, так, примусы починяю…
Можно было как-то так на крайний случай. Возможно, поседеть пришлось бы не «почти», а по настоящему, но квартира бы осталась :)
Junior, который в первый день работы удалил базу данных с production