Rails 密码箱和盲索引,无法访问加密字段

问题描述 投票:0回答:1

我安装了密码箱

v1.3.3
/ 盲索引
v2.3.2
宝石(必须使用这个版本,目前无法升级)。

我使用的是 Rails 6.0.3.2 和 ruby 2.6.9。

我按照以下步骤操作:

当我删除纯文本列时,我无法再使用

User.last.email
访问电子邮件字段,它说

undefined method `email' for #<User:0x0000000125f46340>

我希望能够进入这个领域。

这就是我的用户模型的样子:

  ...
  has_encrypted :email, migrating: true
  blind_index :email, migrating: true

  # removing this after dropping the column does not change anything, email is still not acessible
  self.ignored_columns = ["email"]
  ...

初始迁移:

class AddEncryptionToPiiFields < ActiveRecord::Migration[6.0]
  def change
    # users encrypted fields
    add_column :users, :email_ciphertext, :text

    # users blind columns and indexes
    add_column :users, :email_bidx, :string
    add_index :users, :email_bidx, unique: true
  end
end

我有现有数据,因此在第一次迁移后我运行了

Lockbox.migrate(User)
。完成后,我将通过以下迁移删除列:

class DropNonEncryptedFields < ActiveRecord::Migration[6.0]
  def change
    remove_column :users, :email
  end
end

之后我就无法再访问

User.last.email

我错过了什么?为什么我无法再访问

email
字段?

数据库似乎已就位所有“密码”字段,我可以访问

User.last.email_ciphertext

ruby-on-rails database encryption rubygems ruby-on-rails-6
1个回答
0
投票

解决方案很简单:只需从模型中的所有加密字段中删除“migration: true”即可。

© www.soinside.com 2019 - 2024. All rights reserved.