0

データベースと対話するために、dbix::class とCatalyst を使用しています。ただし、保存しているデータの一部は機密であるため、データベースに入る (挿入または更新される) 前に暗号化し、出てくる (選択される) ときに復号化したいと考えています。そして、このモジュールを使用する方法を知ってDBIx::Class::PassphraseColumnいます。スキーマファイルにこれを含めることで、パスワードをデータベースに入れるときに自動的にパスワードを暗号化できます。

__PACKAGE__->add_columns(
    '+password' => {
        passphrase       => 'rfc2307',
        passphrase_class => 'BlowfishCrypt',
        passphrase_args  => {
            cost        => 14,
            salt_random => 20,
        },
        passphrase_check_method => 'check_password',
    }
);

パスワードを更新するときはいつでも、暗号化について心配する必要がないように、DBIx が自動的にそれを行います。値を列に挿入または更新するたびに暗号化し、選択するたびに復号化されるのと同様の方法はありますか? または、データを操作する機会を与える挿入または更新の前、または選択の後に呼び出されるメソッドを追加する方法はありますか? ありがとう!

4

1 に答える 1

1

column accessor overloadingを見てください。空でない場合は @_ のデータを暗号化し、値を返すたびに復号化できます。そのページの例を、ニーズに合わせて変更しました。

__PACKAGE__->add_columns(description => { accessor => '_description' });

sub description {
    my $self = shift;

    # If there is an update to the column, encrypt it before calling the original accessor
    return $self->_description(encrypt($_[0])) if @_;

    # Fetch and decrypt the column value.
    return decrypt($self->_description);
}

まだencrypt()とdecrypt()を指定する必要がありますが、これで大体のことは解決できます。

于 2012-07-23T07:53:50.880 に答える