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) にありました。
ディレクトリを作ります。
#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 データベースがマウントされました。 データベースがオープンされました。 }}
#pre{{ SQL> alter system set encryption key identified by "ThisIsAPassword";
システムが変更されました。
SQL> }}
今度は作れました。
ファイルが作られています。
#pre{{ [oracle@ora1 ~]$ ls -l $ORACLE_HOME/ORA_WALLETS/ 合計 4
まず閉じてみます。
#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> }}
今度は暗号化表領域がちゃんと作れるでしょう。
#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 全体を作り直す必要があります。