Oracle 9 と JDBC を使用しており、DB に挿入された CLOB を暗号化したいと考えています。理想的には、プレーンテキストを挿入して、ストアド プロシージャで暗号化できるようにしたいと考えています。
String SQL = "INSERT INTO table (ID, VALUE) values (?, encrypt(?))";
PreparedStatement ps = connection.prepareStatement(SQL);
ps.setInt(id);
ps.setString(plaintext);
ps.executeUpdate();
プレーンテキストは 4000 文字を超えることはないと予想されますが、暗号化するとテキストが長くなります。現在の暗号化のアプローチでは dbms_obfuscation_toolkit.DESEncrypt() を使用していますが、varchar のみを処理しています。以下は機能しますか?
FUNCTION encrypt(p_clob IN CLOB) RETURN CLOB
IS
encrypted_string CLOB;
v_string CLOB;
BEGIN
dbms_lob.createtemporary(encrypted_string, TRUE);
v_string := p_clob;
dbms_obfuscation_toolkit.DESEncrypt(
input_string => v_string,
key_string => key_string,
encrypted_string => encrypted_string );
RETURN UTL_RAW.CAST_TO_RAW(encrypted_string);
END;
一時的な clob について混乱しています。閉じる必要がありますか?それとも私は完全に軌道から外れていますか?
編集:難読化の目的は、データへの些細なアクセスを防ぐことです。もう 1 つの目的は、既に varchar 列を難読化しているのと同じ方法で CLOB を難読化することです。オラクルのサンプルコードは、私の特定の問題がある場所である clob を処理しません。varchar (2000 文字未満) の暗号化は簡単です。