データベースの暗号化 (V5R3 以降)

V5R3 からデータベースの内容を暗号化できるようになっています。

前提のソフトウェアは 5722AC3 暗号化アクセスプロバイダー 128-BIT になっています。
というか、この暗号化アクセスへのインターフェイスが DB2/400 に統合されている、ということでしょうね。


暗号化されたデータを格納するには

サンプルのデータベースを使ってやってみました。

さすがにそのまま使うのはなんとなく気が引けたので、コピーして使っています。元のテーブルからデータも暗号化してコピーできますし。

CREATE TABLE SAMPLEDB/EMPLOYEE_ENCRYPTED LIKE SAMPLEDB/EMPLOYEE

暗号化したデータを格納できるように、データ型を ALTER TABLE で変更します。

ALTER TABLE SAMPLEDB/EMPLOYEE_ENCRYPTED ALTER COLUMN FIRSTNME SET
DATA TYPE VARCHAR ( 128) FOR BIT DATA NOT NULL

VARCHAR FOR BIT DATA というのは VARCHAR CCSID 65535 というのと同じことになります。実際にそう指定しても OK でした。
暗号化されたデータの格納には CHAR/VARCHAR FOR BIT DATA のほかに BINARY/VARBINARY や BLOB などが使えます。
長さは 8 バイト + 元のデータの長さを 8 で割れる数に切り上げた長さに基本的にはなるようです。BLOB の場合や、後述する"ヒント"というものを使った場合はまたこれよりも長くなります。

ALTER TABLE SAMPLEDB/EMPLOYEE_ENCRYPTED ALTER COLUMN LASTNAME SET
DATA TYPE VARCHAR ( 128) FOR BIT DATA NOT NULL

データの暗号化

暗号化するためのパスワードを設定します。

SET ENCRYPTION PASSWORD 'ABCDEF' WITH HINT 'A6'

HINT はパスワードを思い出すためのヒントです。

パスワードは実行後にちゃんとログから消えるようになっています。

元のデータを暗号化しながらコピーしてみましょう。
ENCRYPT 関数を使用します。(ENCRYPT_RC2 関数のシノニムですので、もちろん ENCRYPT_RC2 でも OK です)

INSERT INTO SAMPLEDB/EMPLOYEE_ENCRYPTED (EMPNO, FIRSTNME, MIDINIT,
LASTNAME, EDLEVEL) SELECT EMPNO, ENCRYPT(FIRSTNME), MIDINIT,
ENCRYPT(LASTNAME), EDLEVEL FROM SAMPLEDB/EMPLOYEE

中身を見てみましょう。

暗号化されていて、そのままではわからないようになっていますね。

ENCRYPT('ab','ABCDEF','A6') や ENCRYPT('CD','abcdef') のようにカラム毎に暗号やヒントを指定することもできます。

INSERT INTO SAMPLEDB/EMPLOYEE_ENCRYPTED (EMPNO, FIRSTNME, MIDINIT,
LASTNAME, EDLEVEL) VALUES(1, ENCRYPT('ab','ABCDEF','A6'), 'A',
ENCRYPT('CD','abcdef'), 1)

妥当性検査リストにパスワードを入れてホスト変数として、INSERT 時に代入する、というあたりが妥当な使い方でしょうか。

INSERT INTO FILE1 VALUES('0001', ENCRYPT('abcdata', :var1))

データの暗号化解除

データを正しく表示させるにはパスワードの設定されている環境で DECRYPT_xx 関数 (ここでは DECRYPT_CHAR) を使って変換する必要があります。

SELECT EMPNO, DECRYPT_CHAR(FIRSTNME), MIDINIT,DECRYPT_CHAR(LASTNAME)
FROM SAMPLEDB/EMPLOYEE_ENCRYPTED

DECRYPT_CHAR 関数で表示させた結果です。

ヒント

ちなみに HINT は GETHINT 関数で取り出すことができます。

こんなかんじですね。

[Top Pageに戻る]

Ads by TOK2