1

暗号化された列を作成しようとすると問題が発生します。OS X 10.9.5

gnupg 2.0.22 で作成された公開/秘密鍵:

    gpg -a --export > myKey .key.pub
    gpg -a --export-secret-key myKey > .key.prv

ここで何が起こっているのかについての指針はありますか? 次のようにssnフィールドの移行が追加されたモデルがあります:

    add_column :users, :ssn, :binary

ユーザーモデルで

    has_encrypted_column :ssn

開発データベースに pgcrpyto 拡張機能を追加

config/initializers/pgcrypto.rb 内

    PGCrypto.keys[.public] = {path: '.key.pub'}
    PGCrypto.keys[.private] = {path: '.key.prv',armored: true, password: 'myPassword'}

レールc

    User.create(username:'x',ssn:'123-45-6789')

このエラーが発生します。列は ssn なので、正しいことをしているように見えます

TypeError: wrong argument type Arel::Nodes::BindParam (expected String)
from ... /vendor/ruby/2.2.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql/quoting.rb:19:in `escape_string'
from ... /vendor/ruby/2.2.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql/quoting.rb:19:in `quote_string'
from ... /vendor/ruby/2.2.0/gems/pgcrypto-0.4.1/lib/pgcrypto/adapter.rb:51:in `pgcrypto_encrypt_string'

次の **** は、バグがあると思われる場所ですが、ここでどのメソッドを呼び出すべきかわかりません: Arel::Nodes::BindParam に関する多くのドキュメントが見つかりません。これは値を「123-45-6789」に設定し、pgcrypto_encrypt_string 呼び出しで暗号化する必要があると思います。キーが正しいことを確認しました。

     57     def pgcrypto_insert(arel)
     58       if table = PGCrypto[arel.ast.relation.name.to_s]
     59         arel.ast.columns.each_with_index do |column, i|
     60           if options = table[column.name.to_sym]
     61             key = options[:key] || PGCrypto.keys[:public]
     62             next unless key
     63             # Encrypt encryptable columns
     64   *****     value = arel.ast.values.expressions[i]
     65             arel.ast.values.expressions[i] = pgcrypto_encrypt_string(value, key)
     66           end
     67         end
     68      end
     69    end

どんなポインタでも大歓迎です。フォークしてプル リクエストを実行することができれば幸いです。

4

1 に答える 1