Question

Rails 7 vừa ra mắt Active Record Encryption, cho phép encrypt data ở trên tầng Application. Nhưng nó đem lại tác dụng gì khi chúng ta đã encrypt data ở tầng Database rồi nhỉ 🤔.

🌿 Why?

  • 🌱 Khi có hacker chiếm được quyền hệ thống, snapshot database hoặc application logs sẽ chỉ hiển thị dữ liệu đã được mã hóa.

  • 🌱 Ngăn ngừa lập trình viên sơ xuất để lộ dữ liệu nhạy cảm thông qua application logs.

  • 🌱 Ngăn truy xuất dữ liệu trong Rails console nếu không có bộ keys để giải mã.

🌿 How?

Setup

  • Tạo keys:
$ rails db:encryption:init

Declare attribute

  • Định nghĩ trong modal trường encrypts.
class User < ApplicationRecord
  encrypts :email
end
  • Khi tạo user, giá trị của email đã được mã hóa.

Info

Không thể find_by theo thuộc tính được mã hóa.

Nếu vẫn muốn truy vấn theo thuộc tính, hãy thêm option deterministic: true

class User < ApplicationRecord
  encrypts :email, deterministic: true
end

🌿 Refer