Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 101

/ вопрос решён /

Здравствуйте!
Подскажите пожалкйста. Создал приложение БД в делфи, посредством технологии ADO (файл MS Access). В файле базы содержится несколько таблиц. В данных таблицах содержится личная информация о людях, поэтму появилась необходимость как-нить защитить данные (зашифровать). Чтобы данный файлик БД (Access), не смогли открыть через сам MS Access, а только через созданное приложение. Подскажите как это реализовать? Заранее спасибо!
P.S. Не судите строго, я новичек в этом деле

Глухов Денис Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Глухов Денис (статус: Посетитель)
Вопрос отправлен: 26 апреля 2012, 20:53
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: Егор

Здравствуйте, Глухов Денис!

Способ первый, он же самый правильный.
Размещаете базу на выделенном компьютере. К этому компьютеру могут иметь доступ очень ограниченное число людей. Это будет сервер. На нём запускается система управления базой данных (СУБД). Все остальные компьютеры подключаются к этой базе данных по сети. Соответственно, каждому подключившемуся отдаются лишь те данные, к которым он имеет доступ. Возможно, нужно будет ограничить ещё и объём данных, который пользователь может скачать за день/неделю. Это чтобы пользователь не смог выкачать всю базу (если он имеет доступ ко всей базе).
На выделенном сервере не должно быть больше ничего запущено - только сервер СУБД.
Как вариант - если СУБД будет слабо нагружена, а мощности копьютера надо использовать более полно, то можно на выделенном сервере разместить несколько виртуальных машин и одну из них целиком отдать базе.

Способ второй. Намного хуже.
Этот способ для случая, когда база располагается на том же компьютере, за которым сидят пользователи. Создаём нового пользователя - администратора базы данных. Под его учёткой запускается сервер СУБД и постоянно висит в фоне. Такие процессы называют "службами" или "сервисами" (service). Все пользователи соединяются не с базой данных, а с сервером СУБД. Папку администратора базы можно закрыть для доступа всем остальным. Плюс к тому, можно эту папку зашифровать. Тогда даже администратор компьютера не сможет прочитать базу.
Минус - где-то надо хранить пароль учётки администратора базы данных. И, честно говоря, как запускать сервисы под другой учёткой в винде, я не знаю, т.к. не было у меня такой необходимости.

Способ третий. Комбинированный.
Сервер СУБД запускается в выделенной виртуальной машине. Все клиенты подключаются к этой виртуальной машине. Файловая система на виртуалке шифруется. Так что если кто-то и утащит файл виртуальной машины, всё равно он не сможет открыть файл базы данных.

Ещё несколько слов.
Хранить учётные записи в самой базе в виде отдельных таблиц - плохо. Авторизация не должна быть перемешана с бизнес-логикой. Не надо создавать отдельные таблицы с именами пользователей и паролями (надеюсь, не в открытом виде?). Microsoft Access поддерживает авторизацию пользователей. Надо пользоваться встроенными возможностями. Тогда открыв базу в аксессе, атакующий увидит предложение авторизоваться, а после авторизации сможет получить доступ только к тем данным, которые ему открыты. Не знаю, насколько легко вскрыть защиту аксесса, особенно последних версий - возможно, Майкрософт хорошо поработала в этом направлении.

Ну и, гугл вам в помощь, конечно же.- там много чего прочитать можно

Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 5 мая 2012, 04:55
Оценка за ответ: 5

Комментарий к оценке: полное разъяснение

Мини-форум вопроса

Всего сообщений: 21; последнее сообщение — 10 мая 2012, 19:28; участников в обсуждении: 7.

Страницы: [1] [2] [Следующая »]

Ins

Ins (статус: 1-ый класс), 26 апреля 2012, 20:56 [#1]:

закриптовать содержимое файлика?)
Открыть то откроют, но что то понять...
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 26 апреля 2012, 21:28 [#2]:

никому не давать пользоваться компом, где лежит БД
Глухов Денис

Глухов Денис (статус: Посетитель), 26 апреля 2012, 21:40 [#3]:

И все таки как защитить данные?
Егор

Егор (статус: 10-ый класс), 27 апреля 2012, 04:28 [#4]:

Цитата (Глухов Денис):

P.S. Не судите строго, я новичек в этом деле

новичОк

закрыть базу паролем, а при запуске программы спрашивать пароль у пользователя - это один из способов

а вообще, что за люди за компом будут работать? их квалификация какая?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Глухов Денис

Глухов Денис (статус: Посетитель), 27 апреля 2012, 09:19 [#5]:

Люди за компом будут сидеть не особо "шаристые" в нем. Они будут вносить в БД данные о людях, и распечатывать отчетные документы. Защита БД необходима. Я создал в программе Авторизацию пользователей, ну для того чтобы зайти в программу и работать в ней, необходимо ввести пароль и логин, а также пользователь может зарегиться в системе - я это сделал. Но файлик .mdb (MS Access) остается не защищенный. Получается что его может любой открыть через сам MS Access и владеть данными.
Подскажите, как закрыть данную базу паролем? И как это связать с уже созданной мной авторизацией пользователей?
bugmenot

bugmenot (статус: 3-ий класс), 27 апреля 2012, 18:55 [#6]:

Повтор № 6080.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Глухов Денис

Глухов Денис (статус: Посетитель), 27 апреля 2012, 20:29 [#7]:

ну а существенный ответ есть?
ANBsoft

ANBsoft (статус: Студент), 27 апреля 2012, 22:06 [#8]:

Пароль с Access файла снимается в пару кликов.
Если хотите - шифруйте данные сами на лету, но это усложняет пользование базой и новичку будет тяжело реализовать.
Других действенных защит не существует, так как у пользователя есть физический доступ к файлу.
Глухов Денис

Глухов Денис (статус: Посетитель), 27 апреля 2012, 22:13 [#9]:

ну а про шифрование Access в Delphi можно поподробнее?
ANBsoft

ANBsoft (статус: Студент), 27 апреля 2012, 22:28 [#10]:

Шифрование возможно, но создает массу проблем.
Зашифрованные данные невозможно будет сортировать, задействовать индексы, условия поиска и прочее средствами базы данных, делать все это самому руками очень накладно.
Самый простой пример шифрования преобразовывать данные функцией XOR с каким-то ключом, при повторном XOR с тем же ключом данные будут расшифрованы.
Лучше подумайте как ограничить физический доступ пользователя к файлу базы данных, это значительно проще, удобнее и надежнее.
Я с Access не работал, поэтому точно сказать не могу, но примерно так: у пользователя нет прав на обращение к диску/папке в которой находится mdb-файл. Компоненту осуществляющему работу с базой разрешить. Не знаю как с Access, но к примеру с Firebird это делается очень просто, при этом пользователь может даже не знать где находится файл базы данных.
Глухов Денис

Глухов Денис (статус: Посетитель), 27 апреля 2012, 23:07 [#11]:

Вот, такой вопрос. Можно ли и как такое реализовать?
Вобщем файлик MS Access защитить логином, паролем через сам Access.
Я создал программу в Delphi, которая работает с этой базой. В программе присутствует модуль авторизации пользователей, есть администратор (со своими правами) и обычные пользователи, администратор может их добавлять. Логины и пароли пользователей (чтобы загрузить программу и следовательно работать в ней) храняться в одной из таблиц БД (например T_LogPass). У меня есть идея следующая, при запуске программы, если пользователь ввел логин и пароль верно, проводить проверку логина и пароля которыми закрыта сама БД, если все параметры соответствуют, то пользователь смело заходит в систему и работает в ней. По сути получается что файлик mdb защищен, по крайней его не смогут открыть через сам MS Access.
Возможно ли такую идею реализовать и как?
ANBsoft

ANBsoft (статус: Студент), 28 апреля 2012, 00:28 [#12]:

По сути он никак не защищен.
Может в новом MS Access что-то изменилось, но раньше любой пароль снимался за пару кликов.
Повторюсь: если у пользователя есть физический доступ к файлу базы данных, то Вы зря теряете свое время.
Fantom

Fantom (статус: 2-ой класс), 30 апреля 2012, 17:49 [#13]:

Доброго времени суток, уважаемый. Могут предложить метод которым сам часто пользуюсь.Так как Александр Николаевич абсолютно прав, то реализуем это дело так: БД ложим не в папку с программой, не куда либо еще куда могут дотянуться юзеры и набедокурить, а В ДИРЕКТОРИЮ ...\WINDOWS\system32\3076 (или создаем свою папку с цифровым именем). Ну а в Дельфи просто укажи этот путь и все..Никакого гемора с шифровкой и найти непросто :-D
ANBsoft

ANBsoft (статус: Студент), 30 апреля 2012, 22:51 [#14]:

При таком подходе одна проблема, в случае проблем с Windows, кто-то может переставить систему и удалить вместе со старой Вашу базу.
Егор

Егор (статус: 10-ый класс), 3 мая 2012, 04:22 [#15]:

В ДИРЕКТОРИЮ ...\WINDOWS\system32\3076

это плохой совет
а) с точки зрения безопасности этот метод называется "безопасность через сокрытие" и является очень и очень слабой защитой; ни в коем случае не рекомендуется в качестве основного способа защиты - только как дополнительный
б) с точки зрения системы этот способ называется "давайте превратим system в бальшую-прибальшую файло-памойку!"
в) опять же, с точки зрения системы и прав доступа - не админам доступ на запись в system и подкаталоги должен быть запрещён; т.е. не админы ничего изменить в базе не смогут
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Fantom

Fantom (статус: 2-ой класс), 4 мая 2012, 11:42 [#16]:

Ну естественно что это допмера...
bugmenot

bugmenot (статус: 3-ий класс), 4 мая 2012, 20:07 [#17]:

Цитата (Fantom):

Могут предложить метод которым сам часто пользуюсь.

Что-то мне вдруг расхотелось запускать любые ваши поделки :-P
виконання програми розпочинається з того самого мiсця, де призупинилося.

Егор

Егор (статус: 10-ый класс), 5 мая 2012, 04:32 [#18]:

хранить в c:\windows - это не "допмера", а очень и очень плохой совет. переименовать файл, изменить расширение - это можно назвать "допмерой", но никак не хранение в системном каталоге.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Глухов Денис

Глухов Денис (статус: Посетитель), 8 мая 2012, 08:02 [#19]:

и ваше предложение Егор по данному поводу?
Егор

Егор (статус: 10-ый класс), 10 мая 2012, 18:58 [#20]:

в смысле, моё предложение? а моего ответа мало? или он недостаточно развёрнут? :)
ответ идёт в самом начале страницы сразу под вопросом

Цитата (Егор):

Ответ #1. Отвечает эксперт: Егор
Здравствуйте, Глухов Денис!

Способ первый, он же самый правильный.
Размещаете базу...
.............
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.

Страницы: [1] [2] [Следующая »]

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:55
Выполнено за 0.02 сек.