Критерии выбора запроса Ruby Rails включают зашифрованное поле - PullRequest
2 голосов
/ 09 февраля 2011

Я использую Rails 2.3.4

Я ищу не конкретный ответ на этот вопрос, а общие рекомендации по этому вопросу.

В нашей базе данных (MySQL) мы шифруем личную информацию (PII), такую ​​как имя, адрес, номер телефона и т. Д. Но я все время получаю запросы на динамические запросы.

Например, «Можете ли вы запросить в БД, чтобы получить значения записей для определенной даты, но только для пользователей в списке кодов городов».

Итак, критерии выбора включают в себя некоторые зашифрованные данные PII, такие как код города их номера телефона.

Для этого обсуждения таблицы User и Entry имеют следующие поля интереса:

User.id, User.phone

Entry.user_id, Entry.value, Entry.created_at

Из-за шифрования я не могу подключиться к клиенту SQL и выполнить свой запрос «простым» способом, чтобы получить все записи от 21.11.2010 от пользователей в списке кодов городов (555 222 333), что-то вроде этого :

SELECT E.value, SUBSTR (U.phone, 2,3) ИЗ ПОЛЬЗОВАТЕЛЕЙ U ВНУТРЕННИЕ РЕГИСТРАЦИОННЫЕ ВСТУПЛЕНИЯ WHERE DATE (E.sent_at) = '2010-11-21' AND SUBSTR (U.phone, 2,3) in ('555', '222', '333')

Я бы хотел сделать в консоли запрос, который мог бы дать мне похожие данные.

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

Моим грубым болевым путем был следующий многоступенчатый процесс:

  1. выберите ВСЕ идентификаторы и коды регионов ВСЕХ активных пользователей. User.all (: select => "id, phone",: условие => ["state = 'active'"])
  2. сделать снимок экрана терминала,
  3. копирование в текстовый редактор, массаж,
  4. вставить в Excel,
  5. использовать Excel-фильтр для получения идентификаторов пользователя только желаемых кодов городов,
  6. вставьте их в плоский файл, вставьте в список через запятую и затем
  7. вставьте в мой клиент SQL для запроса по user_id SELECT * FROM записей, ГДЕ user_id IN () и дата (create_at) = ''.

"Должен быть лучший способ!" Какие-либо предложения? Заранее спасибо,

1 Ответ

1 голос
/ 13 февраля 2011

Если вы используете ActiveRecord, посмотрите на гем attr_encrypted. Это много делает для вас.

Следующее устанавливает зашифрованные атрибуты:

class User < ActiveRecord::Base
  attr_encrypted :phone, :key => 'a secret key'
  attr_encrypted :password, :key => 'some other secret key'
end

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

User.find_by_email_and_password('test@example.com', 'testing')

https://github.com/shuber/attr_encrypted

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