RACにaudit_trailを実装する2 -Oracle新人奮闘記-2
<RACにAuditを実装する2 -Oracle新人奮闘記->
ペンネーム: world famous beagle
先週、初めてAuditに触れた印旛くん。
今週は、運用方法を考えます。
データベース監査は、決まった方法があるわけではなく、個々のデータベース
環境にあった運用をしなければなりません。
Auditの運用は、印旛くんにはかなり難しいようです。
印旛くんの考えた方法も参考にしていただければと思います。
それでは、今週も早速スタート。
———————————————————————-
まず、重要な情報へのアクセスを監査するために、オブジェクト監査を使って、
重要な情報が格納されているテーブルにAuditをつけたけど、ログを見てみると、
わかりやすいのはOracleのユーザ名とOSのユーザ名がわかることかな。
ただ、これはクライアントサーバ環境じゃないと意味がないよね。
もしクライアントとDBサーバの間にWebサーバがあるような、3階層の環境なら、
Webサーバのユーザ名がとれるだけで、クライアントの情報はとれないもんね。
それでいいんだろうか?
「あの、岸田さん。Auditのログを見るとOracleとOSのユーザ名が取れるんで
すけど、これは3階層のシステムだと取れてもあまり意味がなくなる気がする
んですけど」
「そうだね」
「あ、やっぱりそうですか」
「3階層まではとりあえず考えなくていい
DBに直接アクセスしてくるユーザで不正アクセスがあったかどうかが、
わかればいいから」
「なるほど。じゃあ、内部犯行で情報漏えいなどがあった場合を考えればいい
ですね?」
「まあ、そうだね」
「じゃあ、今日は運用方法を考えてみます」
「うん、早くやって」
よし、Auditの実装から運用までの流れをまず考えよう。
今回は、顧客情報、従業員情報のような重要な情報が格納されているテーブル
にAuditをはるオブジェクト監査を実装する。
運用は、どうすればいいかな。
毎日ログがたまる一方だと、いくらOS上にファイル出力していても、その内デ
ィスクが一杯になっちゃうしな。
圧縮してバックアップファイルにしたいよね。
ってことは、RMANを実装した時
(参照:Oracle新人のRACインストール その19
https://old.insight-tec.com/mailmagazine/ora3/vol310.html)
みたいに、
cronにシェルスクリプトを登録して、
定期的にファイルを圧縮してバックアップを取ればいいかな。
どうやってやるんだっけ・・・。
手順的には・・・
1.cronで毎月月初めにシェルスクリプトを実行する
2.audit_logディレクトリ内の作成から
30日以上経過したAUDファイルをtarで固める
3.tarファイルをbzip2で圧縮
4.AUDファイルを削除
5.bzip2ファイルを/tmpにmove
こんな感じかな。
それじゃ、スクリプトを考えよう。
うーーーん。こんな感じかな・・・。
実行してみてと。
お、いけそうだね!
よし、これでいけそうだ!
Auditの実装手順をまとめてみよう。
---------------------------------------------------------------------- Audit実装手順 1.Auditのログを格納するディレクトリを作成する 例: $ mkdir /home/oracle/audit_log 2.バックアップ用シェルスクリプトを作成する $ cd /home/oracle/audit_log $ vi audit_bk.sh ###audit_bk.sh### find /home/oracle/audit_log/ -name '*.aud' -mtime +30 -exec tar cvf audit_bk`date +%y%m%d`.tar {} ; bzip2 /home/oracle/audit_log/*.tar ; find /home/oracle/audit_log/ -name '*.aud' -exec rm -Rf {} ; find /home/oracle/audit_log/ -name '*.bz2' -exec mv {} /tmp ; 3.cronに登録する(毎月、月初めの午前1時30分にaudit_bk.shを起動する) user: root # crontab -e 30 1 1 * * su - oracle -c "/home/oracle/audit_log/audit_bk.sh" 4.初期化パラメータの変更 SQL> alter system set audit_trail=OS scope=spfile; SQL> alter system set audit_file_dest=/home/oracle/audit_log scope=spfile; 5.DBを再起動する $ srvctl stop database -d $ srvctl start database -d 6.Auditを実装する 例: SQL> audit select on ; 監査が成功しました ----------------------------------------------------------------------
「岸田さん、Auditの実装手順をつくってみたんですが・・・」
「見せて」
「あの、いろいろ考えてみてわかったんですけど、
Auditを実装しようとした場合、まず監査をする対象、というか目的を決める
必要がありますよね?何を監査するために、Auditを実装しますみたいな」
「そうだね」
「それで、その目的にあったAuditを実装して、実装したAuditにあう運用方法
を考えなければいけないと思います」
「うん、それで」
「それで、一応スクリプトと運用方法の手順は作ったんですが、
これを実装するわけにはいかないと思います」
「例えば、何を考える必要があるの?」
「あ、はい。一応考えなければいけないことをまとめてみました」
■SYSの監査ができない
・オブジェクト監査を実装してもSYSユーザのログは出力されない
→SYS_OPERATION_AUDIT=TRUEにすることで、
SYSユーザが監査されます
■DBに負荷をかける
・パフォーマンステストをする必要がある
・AUD$表に監査情報を格納する場合、SYSTEM表領域を使用するので、
注意が必要
■OSファイルに書き出す場合の、AUDファイルのセキュリティ問題
・AUDファイルを書き換えることが容易なため、
ファイルのセキュリティ管理の方法を考える必要がある
■ログファイルを見ることが簡単ではない
・長期間溜まったログの中から、必要箇所を見つけるのが困難である
「段階的に、DB監査を実装する場合のファーストステップとしては、Oracleの
機能をつかうんだから、コストもかからないし、いいとは思います。
ただ、Auditを実装するにあたって一番重要なことは、監査をする目的であっ
たり、対象を明確にすることだと思います」
「まあ、そうだね」
「僕が作ったスクリプトだと、内部犯行で重要な情報にアクセスした、ユーザ
情報が取得できますけど、ファイルのセキュリティや、パフォーマンスにどれ
だけインパクトがあるかどうかは、テストしてみないとわかりません」
「じゃあ、やってみて」
「はい」
DB監査はかなりいろんなことを考える必要があるんだなぁ。
Auditの機能を実装するにも、まず監査する目的をはっきりさせないとね。
もっとDBセキュリティを学ぶ必要があるな。
こつこつと積み重ねていくしかない!
印旛くんは、Auditをマスターすべく、
そしてDBセキュリティを深く掘り下げる修行に出ることになりました。
近いうちにまたお会いできますように・・・。