使用原始sql查询的加密数据存储

vof42yt1  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(295)

我有用户表和赎回表。所以出于安全考虑,我们对用户表email和mobile列进行了加密。
加密前的用户表列:

id | mobile | email | name |

加密后的用户表列:

id | name | email_ciphertext | mobile_ciphertext | email_bidx | mobile_bidx

用户.rb

has_many :redemptions

赎回.rb
属于:用户
所以在一个地方,我想得到赎回信息以及用户的详细信息。我在加密用户的手机和电子邮件之前的查询是

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)

所以这将给我用户和他们的赎回计数。既然我已经使用lockbox和blindindex对数据进行了加密,并且从users表中删除了email和mobile列,那么我应该采用什么方法来实现上述查询的相同结果呢。

pod7payv

pod7payv1#

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

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

相关问题