2014年7月26日土曜日

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

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

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

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

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


記憶域リポジトリのエクスポート手順

OVMM にログインして、
「Server and VMs」タブ → OVSを選択 → Perspective で「Repository Exports」を選択
→ 「+」 ボタンをクリックします。
※今回の OVS は、ovs2 というホスト名です。



リポジトリをマウントさせるサーバの IP アドレス(今回は 192.168.0.239)を入力して、
エクスポートするリポジトリを選択し、
Options には NFS の exportfs で指定するオプションを指定します。
入力したら「OK」をクリックします。
※「repo_localdisk_242」というローカルディスクのリポジトリを選択しています。



リポジトリがエクスポートされました。



OVS でもエクスポート設定ができたことがわかります。
※ちなみに、今回は Oracle VM Server 3.2.1 です。
[root@ovs2 ~]# cat /etc/ovs-release
Oracle VM server release 3.2.1
[root@ovs2 ~]# exportfs
/OVS/Repositories/0004fb0000030000cb5f6d6c030152f1
                192.168.0.239

エクスポートした記憶域リポジトリのマウント

Linux から NFS マウントしてみます。
※ このサーバ「webfs1」には、IP アドレス「192.168.0.239」が設定されています。
※ 「192.168.0.242」は、ovs2 に設定してある IP アドレスです。
[root@webfs1 ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:2d:3c:ac brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.239/24 brd 192.168.0.255 scope global eth0
[root@webfs1 ~]# mount 192.168.0.242:/OVS/Repositories/0004fb0000030000cb5f6d6c030152f1 /mnt
[root@webfs1 ~]# df -h /mnt  ★マウントされた
Filesystem          サイズ  使用  残り 使用% マウント位置
192.168.0.242:/OVS/Repositories/0004fb0000030000cb5f6d6c030152f1
                      466G  260G  206G  56% /mnt
[root@webfs1 ~]# ls /mnt
Assemblies  ISOs  Templates  VirtualDisks  VirtualMachines  lost+found

ただし、OVMM 3.x ではオブジェクトを UUID で管理しているので
どれが何か判別するのは大変です。
たとえば、仮想ディスクのファイルは下記のような感じです。
[root@webfs1 ~]# ls /mnt/VirtualDisks | head
0004fb000012000002104c283d3dbcba.img
0004fb0000120000045638a8c077961f.img
0004fb000012000007f38b8bd1f93920.img
0004fb00001200000a84a56577326586.img
0004fb0000120000116a59b9b214ad29.img
0004fb0000120000123a295f1f1b591b.img
0004fb0000120000131bc215fcdcf234.img
0004fb00001200001cceb74412e30572.img
0004fb000012000025fcbb8eabdbd024.img
0004fb00001200002b5169a70842caa9.img

ちなみに、マニュアルではこのあたりです。
Oracle VM
ユーザーズ・ガイド リリース 3.2.1
4.8.5 記憶域リポジトリのバックアップの有効化
http://docs.oracle.com/cd/E40528_01/b71928/vmusg-repo-manage.html#vmusg-repo-backup

以上、OVMM での、OVS 記憶域リポジトリのエクスポートでした。

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 の話でした。