2012-02-13 6 views
2

暗号化されたフィールドを持つテーブルがあります。 MySQLのドキュメントを調べたところ、暗号化/復号化のためのカスタムデータ型を作成できないことがわかりました。これは理想的です。だから、代わりに、私は次のような見解を持っている:ここでも、MySQLドキュメントを通して読んだ後、私はそれが派生列とSSNを持っているので、ビューが挿入可能ではないことをMySQL - 暗号化カラムの操作

CREATE VIEW EMPLOYEE AS 
SELECT ID, FIRST_NAME, LAST_NAME, SUPER_SECURE_DECRYPT(SSN) AS SSN 
FROM EMPLOYEE_ENCRYPTED 

学びましたフィールドは導出列であるため更新できません。ただし、ビューにトリガーを追加することはできません。そのため、ビューへの書き込みは実際にはオプションではありません。

これを回避するための試みで、私はに似トリガのカップルを作成しました:

CREATE TRIGGER EMPLOYEE_ENCRYPTED_UPDATE 
BEFORE UPDATE ON EMPLOYEE_ENCRYPTED FOR EACH ROW 
BEGIN 
    IF NEW.SSN <> OLD.SSN THEN 
     SET NEW.SSN = SUPER_SECURE_ENCRYPT(NEW.SSN); 
    END IF; 
END; 

だけでなく、それはとても似ているので、私はするつもりはない、挿入するための1(投稿する)。これは単に、ビューから読み込んでテーブルに書き込む必要があることを意味します。

これは暗号化された列(のように、彼らのSSNによって従業員を更新)を照会している更新文のwhere句を供給することを除いてまともなソリューションです。一般的に、私は通常更新のために主キーを使用するので、これは問題ではありませんが、これを行う方法があれば他の暗号化されたフィールドを知る必要があります。

私はMySQLを暗号化と復号化のために重いものにしたいと思っています。できるだけ摩擦なく開発者として働くことができます。暗号化されたフィールドについては心配する必要はありませんが、暗号化されたフィールドを使用することをアプリケーション開発者には願っています。これがここの最終目標です。どんな助けやアドバイスも感謝しています。

答えて

0

あなたが使用している暗号化の種類を知らなくても、あなたの質問に答えてください。それはMD5のような標準的な暗号化/ハッシュです、あなたはWHERE ssn=MD5('ssnStr')タイプの節を持つMySQLでそれを直接使用することができます。つまり、MD5は復号化のためのものではありません。そうでなければ、それはカスタマイズされた暗号化のいくつかの並べ替えだ場合、あなたは

1のどちらかにあります)の暗号化/復号化を実行手順を作成し、WHERE句

または

2)で実行することを使用しますあなたのWHERE句の中であなたが望む条件に合うように、あるいはクエリのどこにでも一致させるために、その前の暗号化を使用します。

SSNの暗号化された値をクエリに入力し、フィールドに一致させるために使用することをお勧めします。 DB内の各行に対して何らかの暗号化を実行する必要がある場合、これは効率的ではありません。言い換えれば、最高のパフォーマンスのために格納されたデータと直接一致する入力をクエリに提供します。

関連する問題