Сейф Rails и слепой индекс, невозможно получить доступ к зашифрованному полю

У меня установлены драгоценные камни Lockbox v1.3.3 / слепой индекс v2.3.2 (нужно использовать эту версию, в данный момент невозможно обновить).

Я использую рельсы 6.0.3.2 и рубин 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.

🤔 А знаете ли вы, что...
Rails обеспечивает интеграцию с различными системами управления версиями, такими как Git и SVN.


57
1

Ответ:

Решено

Решение было простым: просто удалите «migrating: true» из всех зашифрованных полей модели.