Rails - 使用原始SQL查询的加密数据存储



我有用户表和赎回表。因此,出于安全原因,我们对用户表电子邮件和移动列进行了加密。

加密前的用户表列:

id | mobile | email | name | 

加密后的用户表列:

id | name | email_ciphertext | mobile_ciphertext | email_bidx | mobile_bidx

用户.rb

has_many :redemptions

赎回.rb

belongs_to :用户

所以在一个地方,我想获取兑换信息以及用户详细信息。我在加密用户的手机和电子邮件之前的查询是

Redemption.joins(:user).group('users.id, users.mobile').select('users.id AS uid, users.name AS uname, users.email AS uemail, users.mobile AS umobile, count(distinct(redemptions.id)) AS total)

所以这会给我用户和他们的兑换计数。现在我已经使用密码箱和盲标加密了数据,并从用户表中删除了电子邮件和移动列,我应该遵循什么方法才能为上述查询获得相同的结果。

如果您尝试按用户获取兑换计数,您可以执行以下操作:

redemptions_by_user_id = Redemption.joins(:user).group("users.id").distinct.count

然后在单独的查询中查询用户信息。

users = User.where(id: redemptions_by_user_id.keys)

然后将它们组合在一起

users.each do |user|
puts "#{user.id} #{user.email} #{user.phone} #{redemptions_by_user_id[user.id]}"
end

最新更新