2010-07-06 3 views
3

У меня есть база данных, содержащая данные пользователя, включая конфиденциальные данные. Они не так чувствительны, как финансовые, но тем не менее они чувствительны. Пароли к учетным записям хэшируются и соленые, но остальные могут быть зашифрованы без хэша, чтобы разрешить редактирование.Шифрование базы данных

Как далеко вы могли бы зашифровать поля? Не могли бы вы зашифровать все, включая общие поля, такие как имя пользователя, имя, фамилию или только такие поля, как адрес и телефон. Первое имя используется часто после входа пользователя в систему.

Может кто-нибудь предложить алгоритм (с образцом кода, если он доступен) для шифрования полей? В первую очередь я использую PHP и MySQL.

+2

Я добавил свои случайные мысли к аналогичному вопросу несколько дней назад: [Хранение зашифрованной личной информации - здравый смысл?] (Http://stackoverflow.com/questions/3157465/storing-encrypted-personal-information-common- sense/3157747 # 3157747) – Mike

ответ

2

Вы хотите зашифровать базу данных, но все же сможете получить к ней доступ с помощью приложения. Это означает, что приложение должно иметь способ расшифровать данные. Если злоумышленник имеет доступ к базе данных, вполне вероятно, что он получит доступ к приложению и выяснит, как расшифровать базу данных.

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

4

Я бы зашифровать поля вообще, так как это будет королевская боль в задней части :-)

Я бы вместо перемещения конфиденциальных данных в отдельную таблицу и использовать функции безопасности СУБД чтобы защитить данные, сохраняя при этом доступ к нечувствительным данным.

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

И если моя СУБД не предоставила такие возможности (я не знаю, работает ли MySQL), я бы перешел к СУБД, которая это сделала.

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

Для того, чтобы это сработало, вы должны были бы иметь возможность запускать хранимую процедуру под другим пользователем из вызывающего ее. Возможно ли это по MySQL, я понятия не имею.

+0

Какая СУБД вы используете и какие встроенные функции безопасности у нее есть? Я могу проверить, есть ли у них mysql, если вы укажете меня в правильном направлении. – cooper

+3

DB2, а не эта мелочная игра DB2/LUW (Linux/Unix/Windows). Я говорю о дедушке СУБД, DB2/z, версии мэйнфрейма :-) – paxdiablo

3

Я бы использовал Google для «трансцендентных баз данных» - есть и печатные книги по этому предмету, и некоторые он-лайн ресурсы.

Существуют варианты этого метода, но основная идея заключается в следующем:

  1. шифруют чувствительных полей
  2. шифровать с ключом данных только пользователь знает (например, логин/пароль пары)

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

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