Как защитить сетевую папку, содержащую базу данных Access, при этом позволяя приложению WinForms подключаться к базе данных - PullRequest
0 голосов
/ 06 сентября 2011

Я получил поддержку для приложения VB.Net WinForms, и компания, для которой я осуществляю поддержку, потеряла исходный код приложения. У меня есть установочный компакт-диск для приложения и шаги установки для сетевой установки:

  1. Скопируйте базу данных доступа для приложения в местоположение на сервере.
  2. Создайте общий ресурс в папке, содержащей базу данных, и предоставьте всем полный доступ.
  3. Установите приложение на клиентских компьютерах с помощью установки ClickOnce.
  4. При первом запуске приложения запрашивается местоположение базы данных. Если база данных находится в указанном месте, путь к базе данных сохраняется в реестре и используется для подключений к базе данных.

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

OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder();
builder.ConnectionString = "Data Source=" + sDatasource;
builder.Add("Provider", "Microsoft.Jet.Oledb.4.0");
builder.Add("Jet OLEDB:Database Password", "....");
builder.PersistSecurityInfo = true;
gconn = new OleDbConnection(builder.ConnectionString);

Теперь проблема, с которой я сталкиваюсь, заключается в следующем: это приложение используется в колледже, и шаг 2 в настройке вызывает проблемы с безопасностью для колледжа, так как открытие папки до такой степени позволяет любому копировать и выполнять код на сервер. И в колледже есть опытные студенты, которые находят и используют такие проблемы безопасности. Можно ли каким-то образом ограничить доступ к папке, содержащей базу данных, чтобы учащиеся не могли копировать и выполнять код на сервере, но чтобы приложение все еще могло подключаться и использовать базу данных доступа? Помните, что на данном этапе у меня нет исходного кода для изменения строки соединения, используемой для соединений.

UPDATE:

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

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

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

1 голос
/ 06 сентября 2011

Я не думаю, что вы действительно можете сделать эту настройку безопасной, но вы можете сделать что-то, чтобы ее лучше содержать:

Поместите базу данных доступа в "локальную папку" внутри ВМ ... Поместите этопапка на отдельном томе внутри виртуальной машины, которая содержит только эту папку ... сделать этот том постоянным ...

, а затем создать общий ресурс по мере необходимости ...

Таким образом, все, что могут сделать студентыограничен виртуальной машиной (без учета Blue Pill или аналогичной) ... вы даже можете использовать некоторые функции VMWare Workstation для отката виртуальной машины в известное исправное состояние и т. д., если это необходимо ...

0 голосов
/ 09 сентября 2011

В случае, если кому-то будет интересно, я в общих чертах расскажу, как мне удалось заставить это приложение работать без каких-либо изменений в источнике (учитывая, что у меня еще нет рабочего источника!), И при этом папка базы данных защищена длявсе пользователи.

  1. Я создал пользователя на сервере, который будет пользователем, который будет иметь полные права на папку базы данных.Я создал того же пользователя на своем клиентском компьютере с тем же паролем, что и на сервере, но это только потому, что у меня нет настройки контроллера домена.
  2. Я изменил установку ClickOnce, изменил ее на установку MSI и установил приложение на Program Files на сервере.
  3. Затем я открыл доступ к этой папке (которая также включала базу данных Access) и дал права чтения всем, но полные права пользователю, которого я создал в первомшаг.
  4. Затем я создал приложение-оболочку в .Net, которое запустило основное приложение с учетными данными пользователя, имеющего полные права на папку приложения.Мое приложение-оболочка считывает данные о пользователе и пароле из зашифрованного файла, хранящегося на сервере.Я запутал приложение запуска, чтобы скрыть алгоритм расшифровки для чтения имени пользователя и пароля.
  5. Наконец, я создал ярлык для приложения запуска на каждой рабочей станции.

Ну, вот как я это решил, и он работает хорошо ... почти 100% !!;) Единственный незначительный (и очень странный) сбой, который у меня возникает, это ... после перезагрузки клиентского компьютера запуск приложения в течение первых 4 минут после запуска приведет к сообщению access denied когда приложение, запущенное с указанным пользователем, пытается выполнить запись в реестр.Если приложение запускается через 4 минуты после загрузки (да, я рассчитал это !!), то внезапная запись в реестр работает без сбоев.Действительно, очень странная проблема, и, возможно, я задам отдельный вопрос о stackoverflow ... может, кто-то здесь знает причину этой странной аномалии при запуске.

В любом случае.Спасибо всем за ваши мысли и идеи, они очень помогли мне найти решение.

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