2010-11-16 3 views
0

Возможно, это немного расплывчато, но я надеюсь, что среди всех людей на SO будут те, кто раньше сталкивался с этим типом проблемы.Критическое приложение безопасности - проверка строки базы данных

фон
Наше приложение является #/.NET службы C, который управляет поезд заказов. Мы используем LINQ-to-SQL для хранения состояния сети рельсов и подготовки заказов в базе данных SQL Server 2005.
У нас есть требование безопасности, что ПО COTS не может быть «доверено» как таковое.

Требование
Таким образом, риск был захвачен в плен, как: «SQL-сервер или операционная система изменяет статические или динамические данные»
Наш мандат: «Данные, хранящиеся в базе данных, должны быть проверены таким образом, чтобы при чтении он мог быть подтвержден кодом доступа к данным, который он не изменил со времени последнего коммита».

Вопрос
Я хотел бы найти «Automagic» способ выполнения этого требования.
В противном случае, способ удовлетворять условию, не имея для создания столбцов в каждой таблице базы данных для хранения вычисленных хэшей в (что мы тогда должны подтвердить против при чтении.)

+0

Несомненно, любой «автомагический» способ выполнения этого требования будет реализован ПО COTS, создав тем самым парадокс? –

ответ

1

Может быть что-то вроде сумма MD5, что сохраняется в одной или другой таблице в основных данных. Контрольная сумма будет сгенерирована вашим приложением C#, поэтому, если бы кто-нибудь сделал обновление с использованием необработанного SQL, контрольная сумма была бы отключена.

1

на читать его можно подтвердить код доступа данных, что он не изменилось с момента последней фиксации.

Это тривиально. При всех уровнях изоляции без учета загрязнений, за исключением моментального снимка, чтение данных является последним зафиксированным данным. По определению, он не изменился со времени последнего фиксации (другими словами, если он изменился, то новые значения - это последнее совершение). Случайные изменения (поскольку требования, упоминаемые в разделе «ОС изменяет данные»), называются «повреждением данных» и фиксируются page checksum, или на TDE.

Возможно, реальное требование состоит в том, что значение не изменилось в БД после чтения в приложение? Затем Optmistic Concurency Control, вот и все. Просто добавьте каждое «старое» значение в свои предложения UPDATE WHERE, и он позаботится о себе. Если вы не обновили ни одну строку (и вы будете знать, что, проверяя @@ ROWCOUNT или используя предложение OUTPUT), вы знаете, что строка изменилась. Proactive caching также может быть развернут.

 Смежные вопросы

  • Нет связанных вопросов^_^