Oracle その他

wallet(キーストア)を使って表と列を暗号化する方法

個人情報やクレジットカード番号など、大事な情報はウォレットを使って暗号化しておこう

sqlnet.ora にウォレットを配置するパスを記載する

以下のように ENCRYPTION_WALLET_LOCATION パラメタを記入しておく。

ENCRYPTION_WALLET_LOCATION = (SOURCE =
   (METHOD = FILE)
   (METHOD_DATA =
   (DIRECTORY =
    C:\app\12.1.0.2\product\12.1.0\dbhome_1\dbs)))

表の暗号化

wallet 作成

SQL> alter system set encryption key identified by oracle;

システムが変更されました。

暗号化表領域作成

SQL> create tablespace enc_test encryption using 'AES256'
     default storage (ENCRYPT) datafile 'D:\app\12.1.0.2\oradata\v12102\AES256TEST.DBF' size 10M;

表領域が作成されました。

表を作成

SQL> create table encTest (col1 number,col2 varchar(10))
     tablespace enc_test;

表が作成されました。

SQL> insert into encTest values(1,'HELLOMYWORLD');

1行が作成されました。

SQL> commit;

コミットが完了しました。

SQL> select * from encTest;

      COL1 COL2
---------- ----------
         1 HELLOMYWORLD

wallet の状態を確認してみよう

SQL> SELECT * FROM v$encryption_wallet;

WRL_TYPE    WRL_PARAMETER                               STATUS
----------  --------------------                        ------------------
file       D:\app\12.1.0.2\product\12.1.0\dbhome_1\dbs  OPEN

wallet をクローズしてみよう

wallet がクローズしていると、データを参照できなくなっているのがわかる。

SQL> alter system set wallet close identified by oracle;

システムが変更されました。

SQL> SELECT * FROM v$encryption_wallet;

WRL_TYPE    WRL_PARAMETER                               STATUS
----------  --------------------                        ------------------
file       D:\app\12.1.0.2\product\12.1.0\dbhome_1\dbs  CLOSED

SQL> select * from encTest;
select * from encTest
              *
行1でエラーが発生しました。:
ORA-28365: ウォレットがオープンしていません

列の暗号化

列の暗号化は、表の作成時に該当列に ENCRYPT NO SALT を付与することで可能となる。

表を作成

SQL> create table secret_info
        (first_name varchar2(11),
         last_name varchar2(10),
         order_number number(13),
         card_number varchar2(20) ENCRYPT NO SALT);

表が作成されました。

SQL> insert into secret_info values ('Taro', 'Yamada', 100, '1111-2222-3333-4444');

1行が作成されました。

SQL> insert into secret_info values ('Hanako', 'Inoue', 200, '5555-6666-7777-8888');

1行が作成されました。

SQL> insert into secret_info values ('Keita', 'Tanaka', 300, '9999-1111-2222-3333');

1行が作成されました。

SQL> commit;

コミットが完了しました。

SQL> select * from secret_info;

FIRST_NAME  LAST_NAME  ORDER_NUMBER card_number
----------- ---------- ------------ --------------------
Taro         Yamada           100 1111-2222-3333-4444
Hanako       Inoue             200 5555-6666-7777-8888
Keita        Tanaka            300 9999-1111-2222-3333

この記事が役に立ったという方は
ボタンをポチッとしてくれたら喜びます

-Oracle, その他