記載内容の修正について(2017/9/21)
DBにssn
カラムを作成することによって可読性の低下やattr_encrypted
の設定漏れによって平文のままデータが格納されてても気づきにくい問題を引き起こす可能性があるため、DBにssn
カラムを作成しない手順に修正しました。
参考
Github: attr_encrypted
準備
Gemfile
gem "attr_encrypted", "~> 3.0.0"
$ bundle install
DB設計
README通り、暗号化するカラム名はssn
とします。
【修正】REAEME通り、暗号化したssnを格納するカラムを用意します。
Usersテーブル
カラム名 | 型 | 備考 |
---|---|---|
name | string | |
|
||
encrypted_ssn | string | 暗号化されたデータが格納されるカラム |
encrypted_ssn_iv | string | 初期化ベクトルが格納されるカラム |
Scaffold
Usersモデルにname
,,ssn
encrypted_ssn:string
,encrypted_ssn_iv
カラムを作成します。
【追記】ssn
についてはscaffoldでフォームなどを自動生成させる目的で指定してます。
$ rails g scaffold user name:string ssn:string encrypted_ssn:string encrypted_ssn_iv:string
Migration
【修正】DBにssnカラムが作成されないようにt.string :ssn
をコメントアウトします。
【補足】コメントアウトしない場合、DBにssn
カラムが作成されますがattr_encrypted
が正常に動作すればssn
カラムに値は登録されず、空のカラムになります。
class CreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users do |t|
t.string :name
# t.string :ssn DBにssnカラムが作成されないようにコメントアウトする
t.string :encrypted_ssn
t.string :encrypted_ssn_iv
t.timestamps
end
end
end
Migration
$ rake db:migrate
Model
【追記】ssn
アクセサを追加します。
User.ssnに値を指定した状態でsaveすることで,encrypted_ssn
,encrypted_ssn_iv
カラムに暗号化したデータが登録されます。また、User.ssnを参照することで復号化されたデータを取得することができるようになります。
class User < ApplicationRecord
attr_encrypted :ssn, key: 'This is a key that is 256 bits!!'
end
データの登録
ssn
カラムに暗号化させたい値を入力して登録します。
データの取得
ssn
カラムに登録した値が表示されてるが、DBのssn
カラムは空なので、正常に暗号化・復号化されてることがわかります。
【修正】encrypted_ssn:string
,encrypted_ssn_iv
に暗号化したデータが登録されてることがわかります。
DBにssn
カラムは存在しませんが、画面上には暗号化前と同じデータが表示されてるため、復号化も正常に行われたことがわかります。
