У меня установлены драгоценные камни 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
.
Решение было простым: просто удалите «migrating: true» из всех зашифрованных полей модели.