Я бы не стал шифровать поля вообще, так как это будет непросто: -)
Вместо этого я бы переместил конфиденциальные данные в отдельную таблицу и использовал бы функции безопасностиСама СУБД защищает данные, в то же время предоставляя доступ к нечувствительным данным.
Другими словами, две таблицы (user
и user_sensitive
) связаны между собой столбцом userID
.Пусть кто-нибудь просматривает таблицу user
по своему сердцу, но доступ (из любого сорта) к user_sensitive
ограничен телами типа администратора).
И, если моя СУБД нене предоставляю такие возможности (я не знаю, поддерживает ли MySQL), я бы перешел на СУБД, которая это сделала.
Если вы хотите, чтобы пользователь имел доступ к своим собственным конфиденциальным данным, ноне так, как у других пользователей, мы однажды реализовали такую схему в DB2, предоставив хранимую процедуру.Он извлек все нужные строки, но также проверил, какой пользователь его выполнял.Для строк, которые не соответствуют этому пользователю, конфиденциальная информация была удалена.Базовая таблица была полностью защищена от всех, кроме самой хранимой процедуры.
Чтобы это работало, вы должны иметь возможность запускать хранимую процедуру под другим пользователем, нежели тот, который ее вызывает.Возможно ли это под MySQL, я понятия не имею.