Как я могу запретить локальным администраторам доступ к файлам базы данных, зашифрованным с помощью EFS?
Давайте предположим, что у меня есть многопользовательское клиент-серверное приложение C# и SQL Server 2008 Express в качестве базы данных. Это приложение, которое должно быть установлено на ПК клиента, где каждый, кто работает в компании, может иметь доступ, то есть физический доступ к .mdf
файл бесплатный, так что можно легко скопировать .mdf
файл на его / ее машину, присоедините его и просмотрите всю структуру БД и код хранимых процедур, которые я разработал.
Я прочитал много информации, касающейся этой проблемы, и все указывало на использование бесплатной EFS (шифрованной файловой системы) Windows. Следовательно, мне удалось зашифровать .mdf
файл с определенной учетной записью пользователя Windows, которую я создал специально для этого, установите пароль для пользователя, чтобы никто не мог войти в систему как мой пользователь и расшифровать файл. Все было хорошо, но я столкнулся с дилеммой, что пользователь, с помощью которого пользователь входит в систему, почти всегда будет находиться в группе локальных администраторов, поэтому он может легко сбросить пароль для моего пользователя и войти в систему как мой пользователь для расшифровки файла. Я не могу исключить своего пользователя из группы администраторов.
Может ли кто-нибудь помочь мне решить эту проблему, пожалуйста? Или, возможно, есть возможность расшифровать файл, не создавая дополнительных пользователей, чтобы они не могли расшифровать .mdf
файл?
Буду очень признателен за любую помощь!
2 ответа
EFS шифрует файлы с помощью случайного ключа шифрования файлов (FEK) и шифрует этот ключ с помощью ключа RSA, принадлежащего пользователю... этот ключ RSA не защищен DPAPI ... если система настроена с агентом восстановления ключа, FEK также зашифрован для ключа RSA агента восстановления ключа (это может быть локальный администратор, но его можно изменить даже без агента восстановления ключа)
если локальный администратор меняет пароль пользователя, его главный ключ DPAPI остается нетронутым, все еще защищенным старым паролем пользователя... изменение пароля не даст вам доступа к главному ключу DPAPI и, следовательно, не даст Вы получаете доступ к личному ключу пользователя RSA...
если станция является членом домена, контроллер домена будет иметь ключ дешифрования, который позволит расшифровать главный ключ DPAPI ...
Если не считать перемещения хранилища данных в облако и использования вашим приложением веб-служб, я не думаю, что вы многое можете сделать. Я предполагаю, что вы пытаетесь защитить какой-то IP, который у вас есть в базе данных. Если вы можете получить логику в клиентской или серверной части вашего приложения, вы можете запутать свое приложение, и тогда вам не придется слишком сильно беспокоиться об этой проблеме. В любом случае, я полагаю, что ваши данные принадлежат вашим пользователям, и я был бы весьма раздражен тем, что компания пытается заблокировать мои собственные данные, шифруя базу данных.
Я думаю, что единственное реальное решение - это решить эту проблему с помощью договора купли-продажи, который ограничивает то, что они могут делать с вашим программным обеспечением, даже если они декомпилировали его.