Front page   Edit Freeze Diff Upload Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes

技術文書/Oracle/11g/暗号化表領域

Last-modified: Sat, 29 Jan 2011 15:27:48 JST (3924d)
Top > 技術文書 > Oracle > 11g > 暗号化表領域

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.

実際にやってみました。

[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: ウォレットの場所を設定する EditEdit(GUI)

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

[oracle@ora1 1_Basic]$ mkdir $ORACLE_HOME/ORA_WALLETS

sqlnet.ora を編集します。

[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

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

[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)))

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

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: ウォレットを作成する EditEdit(GUI)

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

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

SQL> 

今度は作れました。

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

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

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

まず閉じてみます。

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


閉じれません。

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

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

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

そうみたいです。

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

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

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

SQL> 

手順4: データを暗号化(または復号化)する EditEdit(GUI)

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

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

確認 EditEdit(GUI)

ウォレットが開いているかどうか EditEdit(GUI)

v$encryption_wallet 表を見ます。

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

表領域が暗号化されているかどうか EditEdit(GUI)

dba_tablespaces で見れます。

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 です。

SQL> select * from v$encrypted_tablespaces;

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

SQL> 

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

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> 

暗号化表領域の利用法 EditEdit(GUI)

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

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

表が変更されました。

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

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

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

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

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


SQL> 

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

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



URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White