2013-11-01 4 views
-1

Сценарий заключается в том, что наш клиент владеет и управляет системой (мы ее написали), размещенной у их клиентов. Их клиенту не разрешено изменять любые данные в базе данных за системой, но они могут изменять данные, если они выбрали, поскольку они имеют полные права администратора (сервер закупается ими и размещается на их территории).Защита данных базы данных

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

Мы используем Linq to Sql и переопределили контекст данных, чтобы для каждого считывания данных мы сравнивали хэш данных строк с сохраненным хешем, ранее сделанным во время вставки/обновления, хранящимся в каждой строке в стол.

Мы обеспокоены масштабируемостью, поэтому я хотел бы знать, есть ли у кого-либо другие идеи. Мы пытаемся получить уведомление об изменениях данных в SSMS, запросы запускаются непосредственно на db и т. Д. Кроме того, если кто-то остановил наш сервис (службу Windows), при запуске нам нужно было знать, что строка была изменена. Есть предположения?

EDIT: Позвольте мне пояснить, как я мог быть более ясным. Мы не обязательно пытаемся остановить внесенные изменения (это невозможно, так как они имеют полный доступ). Узнайте больше, если они изменят данные.

+1

Независимо от того, что вы делаете для блокировки доступа на SQL Server, вы не сможете их остановить, поскольку локальные администраторы на сервере: 1. остановить SQL-сервер, 2. установить второй экземпляр SQL Server, включая себя в роли dbadmins, 3. добавление базы данных в новый экземпляр. В конце концов они имеют физический доступ, поэтому могут получить данные. Лучше думать о работе * с * вашими клиентами и помнить, кто оплачивает счет. – Richard

+0

Я не думаю, что вы сможете это сделать, у них есть доступ к оборудованию. Они могут изменить это по своему усмотрению, и когда дело доходит до него, вся безопасность сохраняется на оборудовании. – Liam

+0

Интересный комментарий Ричард, наш клиент попросил нас сделать это - я бы подумал, что работает с «нашим клиентом». Но спасибо за совет. –

ответ

2

Ответ прост: чтобы клиент не мог напрямую манипулировать данными, храните его вне досягаемости в экземпляре или Amazon EC2. Самое большее, что они смогут сделать, это получить строку соединения, которая затем подключит их к пользователю с ограниченными правами.

Кроме того, если кто-то остановил наш сервис (служба Windows), при запуске нам нужно было бы знать, что строка была изменена.

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

для каждой операции чтения данных, мы сравниваем хэш данных строк с сохраненным хэш

Как вы можете догадаться, что это крайне медленно и не масштабируется.

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