#topicpath

[[SQL言語リファレンス:http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05750-03/statements_7.htm]]
を見て作ります。

> 暗号化された表領域の作成例:
> 
> 次の文は、暗号化された表領域を作成します。最初にウォレッ
> トを開いて、データベースに対して暗号化を有効にする必要が
> あります。
> 
> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "welcome1";
>
> System altered.
> 
> CREATE TABLESPACE encrypt_ts
>   DATAFILE '$ORACLE_HOME/dbs/encrypt_df.dat' SIZE 1M
>   ENCRYPTION USING '3DES168'
>   DEFAULT STORAGE (ENCRYPT);
> 
> Tablespace created.

実際にやってみました。

#pre{{
[oracle@ora1 ~]$ sqlplus sys/oracle@orcl as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 土 9月 19 15:54:04 2009

Copyright (c) 1982, 2009, Oracle.  All rights reserved.



Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
に接続されました。
SQL> alter system set encryption key identified by "ThisIsAPassword";
alter system set encryption key identified by "ThisIsAPassword"
*
行1でエラーが発生しました。:
ORA-28368: ウォレットを自動作成できません


SQL> 
}}

んー
wallet がないということですね。

管理者ガイドの「暗号化された表領域」を見直してみますと
次のように書いてあります。

> 透過的データ暗号化の詳細、およびウォレットの作成と
> オープンの手順については、『Oracle Database 2日で
> セキュリティ・ガイド』を参照してください。

[[Oracle Database 2日でセキュリティ・ガイド11g リリース1(11.1):http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05781-03/toc.htm]]
にありました。

* 手順1: ウォレットの場所を設定する [#p5c5a422]

ディレクトリを作ります。

#pre{{
[oracle@ora1 1_Basic]$ mkdir $ORACLE_HOME/ORA_WALLETS
}}

sqlnet.ora を編集します。

#pre{{
[oracle@ora1 1_Basic]$ cp $ORACLE_HOME/network/admin/sqlnet.ora sqlnet.ora.bak
[oracle[ora1 1_Basic]$ vi $ORACLE_HOME/network/admin/sqlnet.ora
}}

こんな感じで書きました。

#pre{{
[oracle@ora1 1_Basic]$ cat $ORACLE_HOME/network/admin/sqlnet.ora 
ENCRYPTION_WALLET_LOCATION=
  (SOURCE=
    (METHOD=file)
      (METHOD_DATA=
        (DIRECTORY=/u01/app/oracle/product/11.2.0/dbhome_1/ORA_WALLETS)))
}}

一度インスタンスを再起動しておくんだそうです。

#pre{{
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area  521936896 bytes
Fixed Size                  2214936 bytes
Variable Size             398459880 bytes
Database Buffers          117440512 bytes
Redo Buffers                3821568 bytes
データベースがマウントされました。
データベースがオープンされました。
}}

* 手順2: ウォレットを作成する [#k9b0260e]

#pre{{
SQL> alter system set encryption key identified by "ThisIsAPassword";

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

SQL> 
}}

今度は作れました。

ファイルが作られています。

#pre{{
[oracle@ora1 ~]$ ls -l $ORACLE_HOME/ORA_WALLETS/
合計 4
-rw-r--r-- 1 oracle oinstall 1573  9月 19 16:14 ewallet.p12
}}

* 手順3: ウォレットを開く(または閉じる) [#ma6426c0]

まず閉じてみます。

#pre{{
SQL> alter system set encryption wallet close;
alter system set encryption wallet close
*
行1でエラーが発生しました。:
ORA-28390: 自動ログイン・ウォレットがオープンしていません


}}

閉じれません。

wallet を指定しないといけないんでしょうか。

#pre{{
SQL> alter system set encryption wallet close identified by "ThisIsAPassword";

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

そうみたいです。

通常は開いたままにするようなので、開いておきます。

#pre{{
SQL> alter system set encryption wallet open identified by "ThisIsAPassword";

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

SQL> 
}}

* 手順4: データを暗号化(または復号化)する [#v228c070]

今度は暗号化表領域がちゃんと作れるでしょう。

#pre{{
SQL> create tablespace ENCRYPT_TS          
  2  datafile '/u02/oradata/orcl/encrypt01.dbf' size 10M
  3  encryption using 'AES256'
  4  default storage (ENCRYPT);

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

SQL> 
}}

暗号化方式は4つから選べます。

- AES192
- 3DES168
- AES128 (by default)
- AES256

* 確認 [#w3d7efbd]

** ウォレットが開いているかどうか [#y7369ddb]

v$encryption_wallet 表を見ます。

#pre{{
SQL> select * from v$encryption_wallet;

WRL_TYPE
------------------------------------------------------------
WRL_PARAMETER
--------------------------------------------------------------------------------
STATUS
------------------------------------------------------
file
/u01/app/oracle/product/11.2.0/dbhome_1/ORA_WALLETS
OPEN


SQL>
}}

インスタンスを再起動すると閉じてしまうので、
毎回 OPEN にしましょう。

** 表領域が暗号化されているかどうか [#d2f07442]

dba_tablespaces で見れます。

#pre{{
SQL> col tablespace_name format a20
SQL> select tablespace_name, encrypted from dba_tablespaces;
TABLESPACE_NAME      ENCRYPTED
-------------------- ---------
SYSTEM               NO
SYSAUX               NO
UNDOTBS1             NO
TEMP                 NO
USERS                NO
EXAMPLE              NO
ENCRYPT_TS           YES

7行が選択されました。

SQL> 
}}

暗号化の情報は v$encrypted_tablespaces です。

#pre{{
SQL> select * from v$encrypted_tablespaces;

       TS# ENCRYPTIONALG         ENCRYPTED
---------- --------------------- ---------
         7 AES256                YES

SQL> 
}}

一緒に見たければこんな感じでしょうか。

#pre{{
SQL> select a.name, b.encryptionalg, b.encryptedts
  2   from v$tablespace a, v$encrypted_tablespaces b
  3   where a.ts# = b.ts#(+);

NAME                 ENCRYPTIONALG         ENCRYPTED
-------------------- --------------------- ---------
ENCRYPT_TS           AES256                YES
TEMP
SYSAUX
UNDOTBS1
EXAMPLE
SYSTEM
USERS

7行が選択されました。

SQL> 
}}

* 暗号化表領域の利用法 [#e74b1663]

この表領域にテーブルを入れると丸ごと暗号化されます。

#pre{{
SQL> conn scott/tigertiger0
接続されました。
SQL> alter table emp move tablespace encrypt_ts;

表が変更されました。
}}

ウォレットを閉じてみます。

#pre{{
SQL> conn sys/oracle as sysdba
接続されました。
SQL> alter system set encryption wallet close identified by "ThisIsAPassword";

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

暗号化されているのでアクセスできません。

#pre{{
SQL> conn scott/tigertiger0
接続されました。
SQL> select * from emp;
select * from emp
              *
行1でエラーが発生しました。:
ORA-28365: ウォレットがオープンしていません


SQL> 
}}

開けばまた見えるようになります。

#pre{{
SQL> conn sys/oracle as sysdba
接続されました。
SQL> alter system set encryption wallet open identified by "ThisIsAPassword";

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

SQL> conn scott/tigertiger0
接続されました。
SQL> select * from emp;

     EMPNO ENAME                          JOB                                MGR
---------- ------------------------------ --------------------------- ----------
HIREDATE        SAL       COMM     DEPTNO
-------- ---------- ---------- ----------
      7369 SMITH                          CLERK                             7902
80-12-17        800                    20
...

14行が選択されました。
}}

このウォレットのファイル ewallet.p12 やパスワードは
絶対になくさないようにしましょう。
暗号化したデータを SYS の持つデータディクショナリに書き込むこともあるようで、
なくすと DB 全体を作り直す必要があります。

----
#comment

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS