Как защитить базу данных от администратора сервера в Sql Server - PullRequest
9 голосов
/ 09 июня 2009

У нас есть требование от клиента защищать базу данных, которую использует наше приложение, даже от своих локальных администраторов (аудиторы только что дали им это требование).

В их требовании защита данных означает, что администратор сервера Sql не может ни читать, ни изменять конфиденциальные данные, хранящиеся в таблицах.

Мы могли бы сделать это с помощью Encryption в Sql Server 2005, но это мешало бы нашему стороннему ORM, и у него были другие недостатки, такие как индексация и т. Д.

В Sql Server 2008 мы могли использовать TDE, но я понимаю, что это решение не защищает от пользователя с правами администратора Sql Server для запроса базы данных.

Есть ли передовой опыт или известное решение этой проблемы?

Эта проблема может быть похожа на проблему с приложением, размещенным у хост-провайдера, и вы хотите защитить данные от администраторов хоста.

Мы можем использовать Sql Server 2005 или 2008.

Ответы [ 6 ]

6 голосов
/ 09 июня 2009

Об этом много спрашивали за последние несколько недель . Ответы обычно сводятся к:

(

a) Если вы не контролируете приложение, вы обречены доверять администратору базы данных

или

b) Если вы контролируете приложение, вы можете зашифровать все с помощью ключа, известного только приложению, и расшифровать его при выходе. Это немного ухудшит производительность (или сильно), поэтому существует TDE. Одним из вариантов предотвращения несанкционированного доступа является использование криптографического хэша значений в столбце, проверяющего их при доступе к приложению.

)

и

в) Проведите обширный аудит, чтобы вы могли контролировать, что делают ваши администраторы.

4 голосов
/ 09 июня 2009

Аудиторы всегда просят об этом, как они просят о других вещах, которые никогда не могут быть сделаны.

Что вам нужно сделать, так это ввести термины снижения рисков и показать, какие элементы управления у вас есть (отслеживание того, когда пользователи повышены до уровня администраторов, что они делали и что они были понижены после этого), а не в абсолютах.

Однажды я попросил одного босса об общей избыточности системы, не указав, что он имел в виду или сколько он готов заплатить и пожертвовать.

3 голосов
/ 09 июня 2009

У меня может быть информация о зарплате в моих таблицах, и я не хочу, чтобы мои доверенные базы данных видели. Столкнувшись с той же проблемой, которую мы сузили, есть варианты:

1 - зашифровать вне SQLServer до вставки и обновления и расшифровать после выбора. То есть: использование шифрования .net. Недостаток: Вы теряете некоторые возможности индексации и поиска, не можете использовать одинаковые и промежуточные.

2- Используйте сторонние инструменты (на уровне io), которые блокируют доступ к базе данных, если не указан пароль. то есть: www.Blockkk.com Недостаток: вам нужно будет доверять стороннему инструменту, установленному на вашем сервере. Возможно, он не поспевает за исправлениями SQL Server и т. Д. *

3- Используйте решение для аудита, которое будет отслеживать выборки, вставки, удаления и т. Д. И уведомлять (по электронной почте или в журнале событий) о нарушениях. Примером нарушения может быть dba, выполняющий выборку в вашей таблице Salaries. затем уволить дба и изменить все зарплаты.

1 голос
/ 09 июня 2009

Я думаю, что правильным решением было бы позволить только доверенным людям быть администраторами баз данных. В качестве администратора БД подразумевается, что у вас есть полный доступ, поэтому, по моему мнению, ваш аудитор должен потребовать, чтобы у вас были процедуры для ограничения доступа к БД. Таким образом, вы работаете с системой через процессы вместо работы с системой (т. Е. Sql server). Иметь человека, которому ты не доверяешь, быть DBA, было бы чокнутым ...

0 голосов
/ 09 июня 2009

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

Я не знаю, как именно это работает на более глубоком уровне.

0 голосов
/ 09 июня 2009

Если вы не хотите, чтобы кто-либо из группы администраторов на сервере имел доступ к базе данных, удалите пользователя «BUILTIN \ Administrators» на сервере.

Однако убедитесь, что у вас есть другой пользователь, который является системным администратором на сервере!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...