2014年7月26日土曜日

Oracle VM Server の記憶域リポジトリを NFS エクスポートしてみる。

Oracle VM Manager(OVMM)では、
記憶域リポジトリのエクスポートができます。

Oracle VM Server がマウントしているリポジトリを
他のサーバからもマウントできるようにすることで、
リポジトリのバックアップをしやすくなったりします。

今回は、OVS リポジトリをエクスポートして
Linux から NFS マウントしてみます。

※ちなみに、今回試したのは Oracle VM Manager 3.2.6 です。

2014年7月15日火曜日

Oracle Database Vault どうですか。

最近、DB データへのアクセスについて事件があったようです。
なんとなく、Oracle Database で有名な「SYS で何でもできちゃう」についての制御ができる
Oracle Database Vault(DBV)がウケそうな気がしたので
簡単に紹介してみようと思います。

DBV を有効化するには

DBV は、Oracle Database の Enterprise Edition のオプション機能です。
DBMS のインストール中などに有効化できます。

DBV では SYS 外にも「DBV 管理者」などの役割のユーザを用意することで、
いわゆる 職掌分離 ができます。
DBCA で DB 作成するときに、下記のような感じで
DBV 管理用のユーザを作成することができます。




DBV が有効化されている環境だと どうなるか

DBV が有効化されると、
今までの権限やロールといった概念の他に
レルム と呼ばれる、スキーマオブジェクトと権限をまとめるような概念が登場します。
SYS をアプリ用データに関わるレルムに参加させないことによって、
DB 管理者が本来の DB 管理業務では見るべきではないデータに
アクセスできないようになります。

まず、SYS でログインしてユーザを作成しようとしてみます。
DB に表領域の作成はできますが、
SYS なのに新規ユーザを作成することはできなくなっています。
[oracle@db03 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on 火 7月 15 00:45:36 2014

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


Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
に接続されました。
SQL> show user
ユーザーは"SYS"です。
SQL> create tablespace ts_user01 datafile '/u02/oradata/dbvdb/ts_user01.dbf' size 10M;

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

SQL> create user user01 identified by "********";
create user user01 identified by "********"
                                 *
行1でエラーが発生しました。:
ORA-01031: 権限が不足しています。

ユーザ管理は、DBV 管理者の役割になっています。
DBV 管理者であれば、ユーザ作成や、権限設定ができます。
※今回は、DBV の管理者として DBVADM というユーザを作成しています。

DBV の管理者はすべての管理操作が許可されているではないので
役割を越えた権限設定などをしようとするとエラーになります。
SQL> connect dbvadm
パスワードを入力してください:
接続されました。
SQL> show user
ユーザーは"DBVADM"です。
SQL> create user user01 identified by "********";

ユーザーが作成されました。

SQL> alter user user01 default tablespace ts_user01;

ユーザーが変更されました。

SQL> alter user user01 quota unlimited on ts_user01;

ユーザーが変更されました。

SQL> grant connect to user01;

権限付与が成功しました。

SQL> grant create table to user01;
grant create table to user01
*
行1でエラーが発生しました。:
ORA-47410: GRANT(CREATE TABLEに対する)のレルム違反です

SYS ユーザで、 create table 権限を付けておきます。
SQL> connect / as sysdba
接続されました。
SQL> show user
ユーザーは"SYS"です。
SQL> grant create table to user01;

権限付与が成功しました。

作成した USER01 のオブジェクトはレルムを作成して保護します。
下記のような DBV 専用の Web UI から設定することができます。
※DB Control とは微妙に URL が異なります。(/em が /dva になる)



細かい設定は省略・・・
Database 11g R2 では、普通の EM っぽい UI です。



レルムで保護した USER01 スキーマに
SYS でテーブル作成しようとしてもエラーになりました。
SQL> connect / as sysdba
接続されました。
SQL> show user
ユーザーは"SYS"です。
SQL> create table user01.tab1 (c1 number, c2 varchar2(10));
create table user01.tab1 (c1 number, c2 varchar2(10))
*
行1でエラーが発生しました。:
ORA-47401: CREATE TABLE(USER01.TAB1に対する)のレルム違反です
しかし、USER01 ユーザであれば、
ちゃんとテーブル作成して、参照もできます。
そして SYS では、USER01 のテーブルを参照できなくなっています。
SQL> connect user01
パスワードを入力してください:
接続されました。
SQL> show user
ユーザーは"USER01"です。
SQL> create table user01.tab1 (c1 number, c2 varchar2(10));

表が作成されました。

SQL> insert into user01.tab1 values(1,'himitsu');

1行が作成されました。

SQL> commit;

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

SQL> select * from user01.tab1;

        C1 C2
---------- ----------
         1 himitsu

SQL> connect / as sysdba
接続されました。
SQL> show user
ユーザーは"SYS"です。
SQL> select * from user01.tab1;
select * from user01.tab1
                     *
行1でエラーが発生しました。:
ORA-01031: 権限が不足しています。

このような感じで、SYS であっても不要なデータ参照ができないように
制御することができます。

ちなみに、上記のような SYS によるテーブル参照エラーも、
ちゃんと監査ログとして残すことができます。




ただし 設計が難しかったり、
当然ながら DB 運用の見直しも必要になったりということはあります・・・


ちなみに、マニュアルはこのあたりがわかりやすいと思います。

Oracle Database 2日でセキュリティ・ガイド 11g リリース2(11.2)
Oracle Database Vaultを使用した管理者のアクセスの制御
http://docs.oracle.com/cd/E16338_01/server.112/b56296/tdpsg_securing_data.htm#CIADFEAG

以上です。Oracle Database Vault の話でした。