なんとなく、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しかし、USER01 ユーザであれば、
接続されました。
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に対する)のレルム違反です
ちゃんとテーブル作成して、参照もできます。
そして 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 件のコメント:
コメントを投稿