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

0 件のコメント:

コメントを投稿