【问题标题】:Rails - Encrypted Data Storage with Raw SQL QueriesRails - 使用原始 SQL 查询的加密数据存储
【发布时间】:2020-06-11 12:36:09
【问题描述】:

我有用户表和兑换表。因此,出于安全原因,我们加密了用户表电子邮件和移动列。

加密前的用户表列:

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)

所以这会给我用户和他们的赎回计数。现在我已经使用 LockboxBlindIndex 加密了我的数据,并从 users 表中删除了 email 和 mobile 列,我应该遵循什么方法来获得与上述查询相同的结果。

【问题讨论】:

    标签: sql ruby-on-rails postgresql encryption lockbox-3


    【解决方案1】:

    如果您想按用户获取兑换计数,您可以这样做:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-14
      • 2011-12-11
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多