権限分析とは

みなさん、こんにちは。
Oracle Cloud Infrastructure 検証チームです。

今回は19cの環境で権限分析について検証してみました。
権限分析とは、Oracle 12cより登場した新機能で、アプリケーション・ユーザーが使用している権限をキャプチャーし、必要な権限と不要な権限を視覚化するための機能です。

この機能は、当初 Database Vault オプションがなければ使用できませんでしたが、現在では Enterprise Edition の標準ライセンスで利用できるようになりました。

 

今回の執筆者は、Oracleに関する最新情報や、Exadataに関する記事をたくさん執筆しています。

環境構築

以下の環境を用意しました。

OS Oracle Linux 9(9.4)
DB 19c(19.25)

補足ですが、Oracle Linux9で19.21以上をインストールする際は、バグ対応としてDoc ID 2760289.1をご参照ください。

権限分析検証認

手順①:権限分析対象のユーザーを作成し、適宜権限を付与

ここでは、veri1ユーザーを作成し、dba権限を付与しています。

手順②:権限情報をキャプチャー作成するためにプロシージャを実行

キャプチャー名は「capture」、Typeは「DBMS_PRIVILEGE_CAPTURE.G_DATABASE」です。

キャプチャーのタイプとしては以下の4種類がありますが、今回の検証では一番範囲が広いG_DATABASEを指定します。

データベース分析( G_DATABASE ) SYSユーザーが使用する権限を除いたすべての権限の使用状況を分析。
ポリシーの中で最も広範囲の分析を行うポリシーです。
ロール分析( G_ROLE ) 指定されたロールの権限の使用状況を分析。
CONTEXT 分析( G_CONTEXT ) conditionパラメータがtrueに評価された場合の権限の使用状況を分析。
ロールとCONTEXT 分析
( G_ROLE_AND_CONTEXT )
conditionパラメータがtrueに評価された場合に、
指定されたロールの権限の使用状況を分析します。

※詳細は以下をご参照ください。
DBMS_PRIVILEGE_CAPTUREの詳細はこちら(公式サイト)
・PL/SQLパッケージおよびタイプ・リファレンス
⇒133 DBMS_PRIVILEGE_CAPTURE
⇒⇒133.3 DBMS_PRIVILEGE_CAPTUREの定数

手順③:キャプチャーを有効にする

この状態では、キャプチャーを作成したのみで有効になっていません(ENABLED=Nの状態です)。なので、有効(ENABLED=Y)にします。

手順④:ユーザー(veri1)にて操作を行う

キャプチャーを有効にすることで、権限情報が収集できるようになったので先ほど作成した権限対象となるユーザー(veri1)にて操作を行います。

ここでは、テーブルを作成してデータ追加する操作を行っています。

手順⑤:キャプチャーをDISABLEにする

権限分析の操作履歴の収集を終了するため、キャプチャーをDISABLEにします。

権限分析の操作履歴の対象は、EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTUREからEXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTUREまでの間に実行されたオペレーションまでです。

よって、今回の例では任意のテーブルを作成してデータ追加した操作が対象となります。

手順⑥:レポート生成のために以下のコマンドを実行

キャプチャーした情報を表示(レポート生成)するために、以下のコマンドを実行します。

レポートは、AWRのようなファイル形式で取得できるものではなく、DBA_USED_**のディクショナリビュー(今回の例ではDBA_USED_PRIVS)で確認することができます。

以下の画面では複数列を表示した結果、画面が見づらくなってしまいましたがご容赦ください。主に以下のカラムでロール/システム権限/オブジェクト権限が使用されているかを確認できます。

USED_ROLE 使用されているロール
SYS_PRIV 使用されているシステム権限
OBJ_PRIV 使用されているオブジェクト権限

なお、このレポート情報は、ENABLEDからDISABLEDにしている間は、蓄積され続けますのでデータベース容量の逼迫が気になる場合は、以下のコマンドでレポート情報(DBA_USED_**)を削除します。

レポート情報が削除されたことを確認します。

まとめ

標準ライセンスのみで低コスト導入可能

冒頭でも述べたように、権限分析の機能は19cの場合、Database Vault オプションは不要Enterprise Edition の標準ライセンスのみで使用可能ですので、低コストで導入できると思いました。

今回の検証では、テーブル作成後にデータを追加しただけの操作でも、内部で複数のロール/システム権限/オブジェクト権限が使用されていることが確認できました。

時間情報の確認や状況分析にやや不安

ただ、レポートを確認する際に権限がいつ使用されたのかといった時間に関する情報が確認できなかった(ディクショナリビューの列に実行された時間を確認する列が存在しない)ので、少しわかりにくいと思いました。

また、1ユーザーの短いオペレーションですら、複数権限が使用された形跡が確認できたので、これが大規模システムで複数ユーザーが大量の処理を実行しているような環境下では、状況分析するのはやや難しそうな感じがしました。

システムで使用されていないユーザーの抽出には便利

一方で、ユーザーが作成されていても、実際にはシステムで使用されていないユーザーを抽出するための用途としては有意義では無いかと思います。

今後19c以降のバージョンで、何か有益な新機能が追加されているようでしたら、追って検証結果を報告させて頂く予定です。

何かご不明なことやご興味を持たれたことがございましたら、お気軽に当社までお問合せ下さい

当社サービス一覧はこちら

 

投稿者プロフィール

技術チーム
技術チーム
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早8年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆しています!
最新技術情報や資格情報をチェックしたいアナタ!毎日遊びに来てください。きっとお役に立てます。