Проблема при попытке создать зашифрованный столбец. OS X 10.9.5postgres 9.4, pgcrypto 0.4.1, rails 4.2.0, ruby 2.2.0, цитируя ожидаемую строку, получил Arel :: Nodes :: BindParam
создания общественных/частных ключей с помощью 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 для разработки баз данных
В конфигурации/инициализаторах/pgcrypto.rb
PGCrypto.keys[.public] = {path: '.key.pub'}
PGCrypto.keys[.private] = {path: '.key.prv',armored: true, password: 'myPassword'}
рельсы с
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
Любые указатели с оценками. Счастлив вилкой и делать запрос на тяну, когда выясняется.
В настоящее время я работаю над атакой этой точной проблемы. Как вы догадались ниже, это действительно связано с изменениями, внесенными с Rails 4.2 и Arel 6.0. Исправление нетривиально, но я планирую представить его как PR для жемчужины pgcrypto. Я дам вам знать, когда я заработаю! – Jazz
Вы можете найти вилку драгоценного камня pgcrypto, которая работает с Rails 4.2 на странице https://github.com/BlinkerGit/pgcrypto. Он также добавляет поддержку симметричного шифрования (установите 'PGCrypto.mode =: симметричный' и' PGCrypto.keys [: симметричный] = 'ваш_key'' в файле инициализатора). Я очень сильно модифицировал жемчужину, и я уверен, что не охватил все случаи краев, поэтому, пожалуйста, ** рассмотрите этот экспериментальный экспериментальный ** и сообщите мне, если вы видите какие-либо ошибки или ненормальное поведение. Благодаря! – Jazz