НОСТАЛЬГИЧЕСКИЙ ДЕТЕКТИВ
Шрифт:
– Здравствуйте! Я - инспектор криминальной полиции Калныня, мы ищем господина Валерия Сотникова. Со мной вместе наш эксперт по компьютерной части – господин Корецкий.
– Здравствуйте! Я – Валерий Сотников, администратор DB-LRE. Эрик мне звонил, что двое из полиции зайдут ко мне в офис. В чём же мы провинились перед органами правосудия? Я тут играюсь, тестирую одну занятную программку, мне её Борька оставил, когда уезжал домой. Борька Розин – это наш контрактник из Америки, он тут у нас раньше руководил разработкой проекта. Мы с ним дружили. Ну, раз уж вы пришли – проходите, будьте как дома. Я свои дела пока отложу, поработаем вместе, во всем разберёмся. Эрик мне сказал, что вы хотите какой-то потерянный контракт найти. Всё найдём, надёжность у нас самая высокая – система прошла тяжёлую опытную эксплуатацию, отработала отлично во всех режимах и запросах. Только одна проблема осталась: данные поступают факсом или мылом, а поэтому требуют ручного ввода. Такой ввод не может на 100% обеспечить защиту от ошибок оператора. Автоматизация ввода полностью защитит нас от ошибок. Жаль бабки этого года уже закончились, осталось ещё полгода продержаться, а потом мы обязательно купим в Штатах программу форматирования электронных сообщений в записи входа. Борька обещал купить и выслать нам софт, как только у нас деньги появятся. Что делать то нужно, господа? Какой у вас план? Какой контракт следует искать?
Тут Зита произвела царственный жест, позволяющий мне перехватить инициативу. Я объявил исходные данные поиска:
– В Земельной книге города Юрмалы контракт зарегистрирован под номером #AC-14397-2002 от 23 мая текущего года, продавец – Франц Ковальский, покупатель – Юрис Фридманис. Агент по продаже – Ивар Пирагс. Попытайся найти такую запись. Если допустить, что произошла ошибка оператора при вводе, то, скорее всего, ошибка могла случиться всего в одном поле данных, верно коллега?
Сотников открыл экран запросов и стал поочерёдно задавать своей системе варианты поиска по номеру контракта, по данным продавца, по фамилии покупателя и по фамилии агента. Безрезультатно! Запись с такими данными в DB-LRE отсутствовала.
– Валера, а сейчас введи только дату. Может быть, у вас информация за целый день потерялась…
– Нет, записей за 23 мая навалом, всего 34 выскочило по запросу.
– Значит, информация за весь день не пропала. Повтори теперь все предыдущие запросы, не задавая дату и только по части фамилии, например «Коваль», «Фрид».
– Ничего! Нужной записи нет! Выскочила какая-то старая запись по незавершённому контракту в феврале этого года – продавец Ковальский, а покупатель Плацис. Контракт был прерван по требованию продавца недвижимости.
– Нас интересуют только завершённые контракты. Давай, переходи на экран просмотра входного массива. Ищи фамилию «Ковальский».
– Вот она родная! Нашлась запись!
На экране, действительно, появилась форматированная строка:
| # AC – 14397-2002| 23.05.2002| Жилой дом, два этажа, участок 20 акров |Кемери, ул. Сатеклес, 67|Ковальский, Франц|Фридманис, Юрис|Пирагс Ивар |.
– Валера, а вы храните файл ошибок входных данных? Переходи на просмотр этого файла и опять используй функцию поиска. Могло случиться, что эта запись чем-то не понравилась системе. Ищи ошибку по номеру контракта.
– В этот день не зарегистрировано ни одной ошибки…
– Выхода нет – придётся восстанавливать копии базы на магнитной ленте. В вашем компе хватит памяти, чтобы в тестовой среде восстановить базу данных в полном объёме?
– Обижаешь, коллега! У нас, как в Греции, всего хватает и памяти тоже достаточно.
– Мы с инспектором Калныня отправимся перекусить, теперь время обеда, а ты, пожалуйста, восстанови копию базы за 24 мая. Я думаю, что у тебя это займёт минут двадцать.
Когда мы вернулись, Валера Сотников легко и сразу нашёл злосчастную запись в восстановленной копии. Я решил подвести итог:
– Коллеги, наша задачка теперь формулируется следующим образом:
Входное сообщение по контракту поступило и обработано без ошибок.
Запись о контракте нашлась в накопителе входных данных.
Запись также присутствует в копии базы на магнитной ленте, снятой 24 мая, но отсутствует во всех следующих поколениях.
Другие записи за 23 мая не пропали, что исключает вариант полной потери информации за день.
В системе не предусмотрены режимы прямого удаления и корректировки записей пользователем с экрана. Корректировка осуществляется только повторным вводом исправленных данных.
В задаче спрашивается: как потерять запись, если она была обработана без ошибок и 24 мая ещё существовала в DB-LRE?
И тут до меня дошло, я нашёл возможный вариант решения:
– Скажи, пожалуйста, Валерий, что это за программа, с которой ты игрался в начале дня, когда мы с Зитой пришли и сломали тебе весь кайф?
– Боря мне оставил программу, которую в США применяют, чтобы искусственно запортить информацию. Рядовые пользователи и программисты, работающие в тестовой среде, не должны знать секреты клиентов. Я имею в виду: точный адрес, сумму денег на счету, пароли и т.д. Такая защита нужна в финансовых системах, а нам зачем – наша база не секретная вовсе.
– На счёт вашей базы ты как раз ошибаешься, Валерий. Она должна стать секретной, если подходить к этому делу профессионально. А технология искажения информации, о которой ты говоришь, называется «data scrambling». И вам придётся тоже применять эту технологию, жизнь вас заставит. Что умеет делать Борина программа?
– Это классная программка, ей нужно только задать интервал записей и алгоритм искажения, она читает запись и искажает согласно заданию. Простые алгоритмы - это, например, в каждом поле записи поменяй первый знак на второй, или два первых знака на седьмой и двадцатый знак латинского алфавита. Я пока освоил только простые алгоритмы - инструкции нет, а экран помощи на английском языке. У меня идёт туго и медленно. Борька эту программу хорошо знал, он с ней раньше, до нашего проекта, много работал ещё в Америке.
– Валера, а ты знаешь, как пользоваться функциями поиска по кусочкам полей? Давай повторим все прошлые запросы, но только двигаясь по кусочкам, заменяя буквы специальными значками.
В течение часа мы всё-таки отловили проклятую запись в сильно искажённом виде. Злоумышленник применил самый простой алгоритм – заменил первый и последний знаки в каждом поле на первый и последний знак соседнего поля:
| #2 C – 14397-2002| Ж3.05.200р | Килой дом, два этажа, участок 20 акро7 | Жемери, ул. Сатеклес, 6в| Фовальский, Франс| Придманис, Юрир| Фирагс, Ивас|.
Сотников, прощаясь, сказал:
– А ты серьёзно волокёшь в нашем деле, коллега! У вас в криминальной полиции все программисты такие?
– Про всех не знаю – я совсем недавно работаю в криминальной полиции, но один очень крутой у нас есть, его Михаилом Веткиным зовут…
Поздно вечером мы с Софийкой собрались выгуливать Грифа в Межапарке. Умный пёс ещё несколько дней назад уловил существенную разницу для него в новом выгульном сервисе. Занятые своими делами хозяева дома на скорую руку запрягали его в ошейник и протаскивали бедное животное в быстром темпе по нескольким кварталам своей улицы. Мы – отдыхающие, медленно и аккуратно надеваем псу ошейник, а потом, никуда не спеша, долго бродим вместе с Грифом по дорожкам лесопарка. Теперь пудель утром и вечером всегда ошивается около двери комнаты для гостей, всем своим видом давая понять хозяевам, что он больше не хочет беспокоить своих хозяев - важных господ. Для выполнения утомительной для Голдиных процедуры теперь, неизвестно откуда, появились рядовые исполнители, которые вследствие их низкого положения в доме гуляют по лесу до тех пор, пока это требуется самому Грифу.