2012年2月11日土曜日

Oracle Database 11g の標準セキュリティ設定について#1

最近、DBバージョンアップ&移行案件のDB設計をやっているので、
ただでさえ多いベーシックネタが更に多くなります。
自分へのメモだけど、誰かの一助になれば。。
(バージョンアップの時にこういうところも気にしているんだとかね。)

さて、今回はOracle Database 11g での標準セキュリティ設定について。
ここ数年の世相を受けてデフォルトがいくつか変わっています。
バージョンアップしてから、「え?そうなの?」というのはお粗末な話。
(割とよく聞くけど。。)

11gで大きく変わったセキュリティ関連の設定は3つ
 1)Auditの監査設定が標準設定されている
 2)DEFALUTプロファイルのパスワード関連の設定が強固に
 3)パスワードの大文字小文字を区別するようになった

では、見ていきます。

■環境
Windows7 64Bit
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64Bit

1)Auditの監査設定がデフォルトで設定されている
 気付かない内に監査ログ取られているなんて領域が心配です。
 設計時に方針を決めておかないと、SYSTEM表領域が・・・


まずは、Audit関係の初期化パラメータ

SQL> show parameter audit

NAME                  TYPE      VALUE
--------------------- --------- ------------------------------
audit_file_dest       string    C:\APP\ORACLE\ADMIN\ORCL\ADUMP
audit_sys_operations  boolean   FALSE
audit_trail           string    DB


10gのaudit_trailのデフォルトはnoneだったのが、11gではDB※1になっています。
※1.Database Configuration Assistantを使用してデータベースを作成した場合の
  デフォルト。それ以外の方法だとnone。

none:標準監査機能は使用禁止
DB:標準監査機能使用可能状態。監査レコードをSYS.AUD$表に書き込みます。

audit_sys_operationsとaudit_file_destは変更無いようです。


まぁ、audit_trailの値がDBになっていたって、監査設定がされていなければ、
なんてことはありません。

監査設定を見ていきます。


■権限監査設定

SQL> select USER_NAME,PRIVILEGE,SUCCESS,FAILURE from DBA_PRIV_AUDIT_OPTS;

SQL> select USER_NAME,PRIVILEGE,SUCCESS,FAILURE from DBA_PRIV_AUDIT_OPTS
   order by PRIVILEGE;

USER_NAME PRIVILEGE                     SUCCESS    FAILURE
--------- ----------------------------- ---------- ---------
          ALTER ANY PROCEDURE           BY ACCESS  BY ACCESS
          ALTER ANY TABLE               BY ACCESS  BY ACCESS
          ALTER DATABASE                BY ACCESS  BY ACCESS
          ALTER PROFILE                 BY ACCESS  BY ACCESS
          ALTER SYSTEM                  BY ACCESS  BY ACCESS
          ALTER USER                    BY ACCESS  BY ACCESS
          AUDIT SYSTEM                  BY ACCESS  BY ACCESS
          CREATE ANY JOB                BY ACCESS  BY ACCESS
          CREATE ANY LIBRARY            BY ACCESS  BY ACCESS
          CREATE ANY PROCEDURE          BY ACCESS  BY ACCESS
          CREATE ANY TABLE              BY ACCESS  BY ACCESS
          CREATE EXTERNAL JOB           BY ACCESS  BY ACCESS
          CREATE PUBLIC DATABASE LINK   BY ACCESS  BY ACCESS
          CREATE SESSION                BY ACCESS  BY ACCESS
          CREATE USER                   BY ACCESS  BY ACCESS
          DROP ANY PROCEDURE            BY ACCESS  BY ACCESS
          DROP ANY TABLE                BY ACCESS  BY ACCESS
          DROP PROFILE                  BY ACCESS  BY ACCESS
          DROP USER                     BY ACCESS  BY ACCESS
          EXEMPT ACCESS POLICY          BY ACCESS  BY ACCESS
          GRANT ANY OBJECT PRIVILEGE    BY ACCESS  BY ACCESS
          GRANT ANY PRIVILEGE           BY ACCESS  BY ACCESS
          GRANT ANY ROLE                BY ACCESS  BY ACCESS
23行が選択されました。

がっつり設定されています。
「CREATE SESSION」で成功も失敗もって、、、
環境によってはログが大量に出そうです。。。


■文監査

SQL> select USER_NAME,AUDIT_OPTION,SUCCESS,FAILURE from DBA_STMT_AUDIT_OPTS
   order by AUDIT_OPTION;

USER_NAME AUDIT_OPTION                  SUCCESS    FAILURE
--------- ----------------------------- ---------- ----------
          DATABASE LINK                 BY ACCESS  BY ACCESS
          PROFILE                       BY ACCESS  BY ACCESS
          PUBLIC SYNONYM                BY ACCESS  BY ACCESS
          ROLE                          BY ACCESS  BY ACCESS
          SYSTEM AUDIT                  BY ACCESS  BY ACCESS
          SYSTEM GRANT                  BY ACCESS  BY ACCESS

※権限監査と重複しているものは記載していません。

文監査も設定されています。


■オブジェクト監査

SQL> select OWNER,OBJECT_NAME,SEL,INS,DEL from  DBA_OBJ_AUDIT_OPTS;

レコードが選択されませんでした。

SQL> select * from ALL_DEF_AUDIT_OPTS;

ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE FBK REA
--- --- --- --- --- --- --- --- --- --- --- --- --- --- ----
-/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/-


流石にオブジェクト監査は設定されていませんね。
ALL_DEF_AUDIT_OPTSは、オブジェクトが作成されるときに適用される
デフォルトのオブジェクト監査オプションですが、こちらも何もありません。
オブジェクト監査はユーザ次第という感じです。

実際に取得されている監査ログを見てみると、、、

SQL> select USERNAME,ACTION_NAME from DBA_AUDIT_TRAIL

USERNAME  ACTION_NAME
--------- ------------------------
DBSNMP    SET ROLE
SYSTEM    LOGON
SYSTEM    LOGON
DBSNMP    LOGON
SYSMAN    LOGON
SYSMAN    LOGON
DBSNMP    LOGON
DBSNMP    LOGON
DBSNMP    LOGON
DBSNMP    LOGOFF
DBSNMP    LOGOFF
SYSMAN    LOGOFF
SYSMAN    LOGOFF

・・・

SYSTEM    SYSTEM GRANT
SYSTEM    CREATE PUBLIC SYNONYM
SYSTEM    CREATE PUBLIC SYNONYM
SYSTEM    DROP PUBLIC SYNONYM
SYSTEM    DROP PUBLIC SYNONYM
SYSTEM    GRANT ROLE

うーん。。
1件のデータ量はそんなに多くないんでしょうが、
レコード数は結構なペースで増えていきそう。。

あとあと、気が付いたらSYSTEM表領域がアレレレ???
という感じでボディーブローのように効きそうな気も?

まとめですが、DBCAでDBを作成するとデフォルトでログが取られます。
自動的に消してはくれないので、領域を消費し続けます。
ログの生成量は環境によると思いますが、
個人的には気にしなてくもいいかもとは思います。
(コネクションプーリングとかしてれば。)

大切なのは、このようなアップグレード時の仕様変更を把握して、
自分のシステムではどのように対処するかということ。
セキュリティ事故が発生した際に、監査ログが自動で取得されていて良かった。
ということもあるでしょうし、
SYSTEM表領域を自動拡張にしてなかったので、気が付いたら。。。
ということもあるかもしれません。

対処はこちら
つづきはこちら

0 件のコメント:

コメントを投稿