nvarchar
データ型の列(異なる言語のテキストを含む)を含む表があります。私はテーブルに挿入する前にデータを暗号化し、レコードをフェッチしている間に同じデータを解読したい。oracleでnvarchar列を暗号化する方法は?
どうすればいいですか?
暗号化と復号化は、秘密鍵で行う必要があります。
私の質問は明らかです。詳しい情報を提供する必要があるかどうかを確認してください。
nvarchar
データ型の列(異なる言語のテキストを含む)を含む表があります。私はテーブルに挿入する前にデータを暗号化し、レコードをフェッチしている間に同じデータを解読したい。oracleでnvarchar列を暗号化する方法は?
どうすればいいですか?
暗号化と復号化は、秘密鍵で行う必要があります。
私の質問は明らかです。詳しい情報を提供する必要があるかどうかを確認してください。
データベースではなく、アプリケーションで直接データを暗号化して解読する方が賢明かもしれないことに注意してください。
OracleのDBMS_CRYPTOパッケージを使用できます。ドキュメントページの中央にはexampleがあります。
まず、SQL式から暗号タイプにアクセスするパッケージを作成する必要があります。たとえば、ABC256をCBCモードでパディングしたいとしましょう:
CREATE PACKAGE pkg_so_42979606
AS
FUNCTION cipher_type RETURN PLS_INTEGER;
END pkg_so_42979606;
/
CREATE PACKAGE BODY pkg_so_42979606
AS
ctype CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
FUNCTION cipher_type RETURN PLS_INTEGER
IS
BEGIN
RETURN ctype;
END;
END pkg_so_42979606;
/
キーが必要です。 Oracleに生成するように依頼できます。それを簡単に処理するために、Base64で移動します。一つを描いてみましょう:私が使用します
DECLARE
key_bytes_raw RAW(32);
key_char NVARCHAR2(64);
BEGIN
key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(32);
key_char := UTL_I18N.RAW_TO_CHAR(UTL_ENCODE.BASE64_ENCODE(key_bytes_raw), 'AL32UTF8');
DBMS_OUTPUT.PUT_LINE('Key: ' || key_char);
END;
/
Key: pMV3D4xhyfNxp3YyfLWzAErGcKkIjK3X6uc/WIeVTls=
このように暗号鍵がpMV3D4xhyfNxp3YyfLWzAErGcKkIjK3X6uc/WIeVTls=
です。
INSERT INTO so_42979606
VALUES (1,
DBMS_CRYPTO.ENCRYPT(UTL_I18N.STRING_TO_RAW('My clear data', 'AL32UTF8'),
pkg_so_42979606.cipher_type(),
UTL_ENCODE.BASE64_DECODE(UTL_I18N.STRING_TO_RAW('pMV3D4xhyfNxp3YyfLWzAErGcKkIjK3X6uc/WIeVTls=', 'AL32UTF8'))));
とクリアで暗号化されたデータを取得する:
今、私はあなたが暗号化されたデータを挿入することができ、テストテーブル
CREATE TABLE so_42979606 (
id NUMBER PRIMARY KEY,
data NVARCHAR2(2000));
を使用します。
SELECT id, UTL_I18N.RAW_TO_NCHAR(DBMS_CRYPTO.DECRYPT(data,
pkg_so_42979606.cipher_type(),
UTL_ENCODE.BASE64_DECODE(UTL_I18N.STRING_TO_RAW('pMV3D4xhyfNxp3YyfLWzAErGcKkIjK3X6uc/WIeVTls=', 'AL32UTF8'))),
'AL32UTF8') data
FROM so_42979606;
ID DATA
-- ----------------------
1 My clear data
を参照してください:[Database Advanced Security管理者ガイド/ 3透過的データ暗号化を使用して格納されたデータの保護](https://docs.oracle.com/cd/B28359_01/network.111/b28530/asotrans.htm#g1011122 )をOracle Help Centerに追加します。 –
@ OlivierJacot-Descombesご意見ありがとうございます。私は標準のエディションでは利用できないため、透過的なデータ暗号化は使用できません。 – Tajinder