SQL言語リファレンス を見て作ります。

暗号化された表領域の作成例:

次の文は、暗号化された表領域を作成します。最初にウォレッ

トを開いて、データベースに対して暗号化を有効にする必要が

あります。

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) にありました。

手順1: ウォレットの場所を設定する

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

#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: ウォレットを作成する

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

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

SQL> }}

今度は作れました。

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

#pre{{ [oracle@ora1 ~]$ ls -l $ORACLE_HOME/ORA_WALLETS/ 合計 4

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

まず閉じてみます。

#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: データを暗号化(または復号化)する

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

#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つから選べます。

確認

ウォレットが開いているかどうか

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 にしましょう。

表領域が暗号化されているかどうか

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> }}

暗号化表領域の利用法

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

#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 全体を作り直す必要があります。



トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-01-29 (土) 15:27:48