很多時候,系統新功能要上線,可是每次系統上線,就把系統帳號全部權限開"select /insert/update/delet any table"權限,
對系統的安全性、資料的安全性也不是一件好作法,可是又不太清楚這個應用系統帳號總共需要哪些權限,這時候,
就可以使用oracle 12c的新功能Privilege Capture來review執行時所需要的全部權限,本文就這個主題來做一些說明。

Oracle 12c 引入了該DBMS_PRIVILEGE_CAPTURE軟件包,它允許您跟踪正在使用的特權,從而使執行特權分析變得更加簡單,從而使您可以撤銷不必要的特權並達到最低特權狀態。

在 19c 之前,此功能是 Oracle Database Vault 選項的一部分,因此在過去只有在您擁有適當的許可證時才能使用它。
從 19c 開始,此功能是 Enterprise Edition 的一部分,因此您不再需要 Database Vault 選項,並且文檔已移至Security Guide。
更新:此許可更改已向後移植 Oracle 12.1。在使用此功能之前,請在您的版本的許可手冊中確認。

基本用法
為了使用該DBMS_PRIVILEGE_CAPTURE包,您必須被授予該CAPTURE_ADMIN角色。
不管你試圖監控什麼,DBMS_PRIVILEGE_CAPTURE包的基本用法都是一樣的。

1.創建權限分析策略。( CREATE_CAPTURE)
2.啟用它。( ENABLE_CAPTURE)
3.等待所需的分析時間。
4.禁用權限分析策略。( DISABLE_CAPTURE)
5.分析結果。(GENERATE_RESULT和查詢字典視圖)
6.如果不再需要該策略以及記錄的數據,請刪除該策略。( DROP_CAPTURE)

分析運行之間的主要區別將基於對CREATE_CAPTURE過程的調用,這將在下面討論。

在啟用和禁用捕獲之間等待的時間是該過程中真正重要的部分。
您必須等待一段有代表性的時間,否則您可能會錯過一些重要的活動。
例如,某些特權可能與不經常發生的任務相關聯,例如年終跨年時的一些必要的系統工作。
如果您沒有在代表期間進行抽樣,您可能會錯誤地得出某些特權是不必要的結論。

注意:在多租戶環境中,這些策略(Policy)是特定於容器(container)的。

CREATE_CAPTURE
該CREATE_CAPTURE過程允許您創建具有不同粒度的權限分析策略。

    G_DATABASE:分析數據庫上的所有權限使用情況,除了 SYS 用戶。ROLES和CONDITION參數不是必需的。
    G_ROLE:按參數中指定的角色分析所有權限使用情況ROLES。使用該ROLE_NAME_LIST函數指定角色。
    G_CONTEXT:當參數中指定的布爾表達式CONDITION評估為 TRUE 時,分析所有特權使用情況。條件可以包括對SYS_CONTEXT.
    G_ROLE_AND_CONTEXTROLES:當和CONDITION條件都為真時分析所有特權使用情況。

所有策略都是在禁用狀態下創建的。下面的代碼給出了每個的簡單示例。

-- Connect to a privileged using in a PDB.
conn / as sysdba
alter session set container = pdb1;

-- Whole database (type = G_DATABASE).
begin
  dbms_privilege_capture.create_capture(
    name        => 'db_pol',
    type        => dbms_privilege_capture.g_database
  );
end;
/

-- One or more roles (type = G_ROLE).
begin
  dbms_privilege_capture.create_capture(
    name        => 'role_pol',
    type        => dbms_privilege_capture.g_role,
    roles       => role_name_list('DBA', 'RESOURCE')
  );
end;
/

-- A user defined condition, when user is TEST (type = G_CONTEXT).
begin
  dbms_privilege_capture.create_capture(
    name        => 'cond_pol',
    type        => dbms_privilege_capture.g_context,
    condition   => 'sys_context(''userenv'', ''session_user'') = ''TEST'''
  );
end;
/

-- Combination of roles and conditions (type = G_ROLE_AND_CONTEXT).
begin
  dbms_privilege_capture.create_capture(
    name        => 'role_cond_pol',
    type        => dbms_privilege_capture.g_role_and_context,
    roles       => role_name_list('dba', 'resource'),
    condition   => 'sys_context(''userenv'', ''session_user'') in (''TEST'',''EMP'')'
  );
end;
/


讓我們來檢視一下捕捉到哪些資訊,DBA_PRIV_CAPTURES視圖將顯示有關現有權限捕獲策略的信息。

column name format a15
column roles format a20
column context format a30
set linesize 100

select name,
       type,
       enabled,
       roles,
       context
from   dba_priv_captures
order by name;

NAME            TYPE             E ROLES                CONTEXT
--------------- ---------------- - -------------------- ------------------------------
cond_pol        CONTEXT          N                      SYS_CONTEXT('USERENV', 'SESSIO
                                                        N_USER') = 'TEST'

db_pol          DATABASE         N
role_cond_pol   ROLE_AND_CONTEXT N ROLE_ID_LIST(4, 3)   SYS_CONTEXT('USERENV', 'SESSIO
                                                        N_USER') IN ('TEST','EMP')

role_pol        ROLE             N ROLE_ID_LIST(4, 3)

4 rows selected.

SQL>

ENABLE_CAPTURE
ENABLE_CAPTURE過程用於啟用捕獲策略。通常,一次只能啟用一個分析策略。
例外情況是可以同時啟用一個G_DATABASE和一個無策略。

begin
  dbms_privilege_capture.enable_capture('db_pol');
  dbms_privilege_capture.enable_capture('cond_pol');
end;
/


DISABLE_CAPTURE
一旦您等待了一段有代表性的時間,就可以使用該DISABLE_CAPTURE過程禁用捕獲。

begin
  dbms_privilege_capture.disable_capture('db_pol');
  dbms_privilege_capture.disable_capture('cond_pol');
end;
/

GENERATE_RESULTS
捕獲完成後,GENERATE_RESULT應使用該過程將捕獲的信息推送到數據字典視圖。

begin
  dbms_privilege_capture.generate_result('db_pol');
end;
/

權限分析視圖
Oracle 12c 中添加了以下視圖,以允許您查詢權限分析運行的結果。

    DBA_PRIV_CAPTURES
    DBA_USED_OBJPRIVS
    DBA_USED_OBJPRIVS_PATH
    DBA_USED_PRIVS
    DBA_USED_PUBPRIVS
    DBA_USED_SYSPRIVS
    DBA_USED_SYSPRIVS_PATH
    DBA_USED_USERPRIVS
    DBA_USED_USERPRIVS_PATH
    DBA_UNUSED_OBJPRIVS
    DBA_UNUSED_OBJPRIVS_PATH
    DBA_UNUSED_PRIVS
    DBA_UNUSED_SYSPRIVS
    DBA_UNUSED_SYSPRIVS_PATH
    DBA_UNUSED_USERPRIVS
    DBA_UNUSED_USERPRIVS_PATH

這些視圖顯示的信息將幫助您決定應該修改哪些授權和角色。


DROP_CAPTURE
分析完成後,您可以選擇刪除捕獲的信息。只能刪除禁用的策略。

begin
  dbms_privilege_capture.drop_capture('cond_pol');
  dbms_privilege_capture.drop_capture('db_pol');
  dbms_privilege_capture.drop_capture('role_cond_pol');
  dbms_privilege_capture.drop_capture('role_pol');
end;
/
 

ref:

https://oracle-base.com/articles/12c/capture-privilege-usage-12cr1

arrow
arrow
    文章標籤
    oracle
    全站熱搜

    噗噗噗的潛水珽 發表在 痞客邦 留言(0) 人氣()