快速搞懂Oracle 19c安全新特性 (二) Privilege Analysis(權限分析)

快速搞懂19c 數據庫安全新特性 (二) Privilege Analysis(權限分析)

爲什麼需要權限分析功能

權限分析可以動態分析Oracle用戶的各種權限(privileges)和角色(Role)的使用/不使用情況進行跟蹤、分析、生成使用報告,從而幫助用戶在滿足業務需求的前提下,實現配置數據庫時的權限(privileges)和角色(Role)精細化管理,提高應用程序和數據庫操作的安全性。
在這裏插入圖片描述
▲來源:https://blog.csdn.net/lqx0405/article/details/52242499

參考:(以後的鏈接爲處理過的短網址)

Release 19 Security Guide
http://dwz.date/abwx
>5 Performing Privilege Analysis to Find Privilege Use

各版本的功能演進

隨着Oracle版本的更新,Privilege Analysis(權限分析)也不斷地變化:

・版本12.1:Enterprise Edition版本中推出Privilege Analysis(權限分析),但作爲Database Vault高級安全選項之一,是需要額外的授權的。

・版本12.2:對該功能進行了加強
- 能夠捕獲更多的權限使用狀況
-能夠捕獲權限的未使用狀況
-能夠多次運行捕獲策略

・版本18c:使用該功能不再需要額外的授權

・版本19c:該功能不再作爲高級安全選項,作爲一般安全功能。
(該變化本質上對用戶並沒有什麼影響)

參考:

Release 18 Administrator's Guide
 http://dwz.date/abw7
>Changes in Oracle Database Vault 12c Release 2 (12.2) 
>Privilege Analysis Enhancements

Release 18 Database Licensing Information User Manual
http://dwz.date/abwN
>Table 1-10 Security 

Release 19 Database New Features Guide
http://dwz.date/abwT
>Privilege Analysis Now Available in Oracle Database Enterprise Edition

如何使用Privilege Analysis(權限分析)

權限分析功能可以通過Oracle Enterprise Manager Cloud Control 或DBMS_PRIVILEGE_CAPTURE程序包來進行調用。
爲了使用DBMS_PRIVILEGE_CAPTURE程序包,以及使用數據字典視圖來確認相關信息,需要賦予用戶CAPTURE_ADMIN角色。

進行權限分析的具體步驟如下:

1.根據業務需求,創建權限分析策略。
2.啓用策略,開始捕獲權限使用情況。
3.禁用策略,停止捕獲權限使用情況。
4.生成權限分析結果。

在創建權限分析策略(DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE)時,
可以指定權限分析的類型以實現特定目標,權限分析的類型如下:

G_DATABASE:基於數據庫範圍的權限分析(SYS權限除外)。
G_ROLE:基於角色(Role)的權限分析。
G_CONTEXT:基於上下文(根據條件)的權限分析。 
G_ROLE_AND_CONTEXT:基於角色和上下文的權限分析。

參考:

Release 19 PL/SQL Packages and Types Reference
http://dwz.date/abyu
>126 DBMS_PRIVILEGE_CAPTURE 

Privilege Analysis(權限分析)測試例


--1.創建用戶

conn / as sysdba
set echo on
set termout on 

--創建分析用戶
drop user cap_user cascade;
create user cap_user identified by cap_user;
grant connect,resource to cap_user;
grant capture_admin to cap_user;

--創建測試用戶
drop user test_priv cascade;
create user test_priv identified by test_priv;
grant connect,resource to test_priv;
grant SELECT ANY TABLE to test_priv;


--2.定義權限分析策略
--DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE
--G_DATABASE,G_ROLE,G_CONTEXT,G_ROLE_AND_CONTEXT

conn cap_user/cap_user

--2-1 SYS_CONTEXT 權限分析
--如果存在的話刪除存在的分析策略
EXEC DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE ('Context Based Policy');

BEGIN
     DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
      name           => 'Context Based Policy',
      description    => 'Context Based Policy test',
      type           => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
      condition      => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'')=''TEST_PRIV''');
    END;
/


--3. 啓用策略

BEGIN
      DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE (
       name       => 'Context Based Policy',
       run_name   => 'Context_Based_Policy_first_run');
    END;
/

---確認分析策略
col NAME format a20
SELECT NAME, TYPE, ENABLED FROM DBA_PRIV_CAPTURES;

    SQL> SELECT NAME, TYPE, ENABLED FROM DBA_PRIV_CAPTURES;

    NAME                 TYPE             E
    -------------------- ---------------- -
    Context Based Policy CONTEXT          Y★
    ORA$DEPENDENCY       DATABASE         N

--4.使用測試用戶執行一些操作 (監測對象)
conn test_priv/test_priv
select * from dual;

--5. 禁用策略
conn cap_user/cap_user

EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE ('Context Based Policy');


--6.生成權限分析報告

BEGIN
  DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT (
    name      => 'Context Based Policy',
    run_name  => 'Context_Based_Policy_first_run');
 END;
 /


--7.查看權限分析報告
--DBA_USED_{PRIVS|SYSPRIVS|OBJPRIVS}
--DBA_UNUSED_{PRIVS|SYSPRIVS|OBJPRIVS}

--7.1 使用的權限分析報告
set linesize 200
set pagesize 200
col SYS_PRIV format a20
col OBJECT_OWNER format a20
col OBJECT_NAME format a30
col RUN_NAME format a30

SELECT SYS_PRIV, OBJECT_OWNER, OBJECT_NAME, RUN_NAME FROM DBA_USED_PRIVS
 WHERE USERNAME = 'TEST_PRIV';

    SYS_PRIV             OBJECT_OWNER         OBJECT_NAME                    RUN_NAME
    -------------------- -------------------- ------------------------------ ------------------------------
                         SYS                  DUAL                           CONTEXT_BASED_POLICY_FIRST_RUN
                         SYS                  DUAL                           CONTEXT_BASED_POLICY_FIRST_RUN
    CREATE SESSION                                                           CONTEXT_BASED_POLICY_FIRST_RUN
                         SYS                  DBMS_APPLICATION_INFO          CONTEXT_BASED_POLICY_FIRST_RUN



--7.2 未使用的權限分析報告
col OBJ_PRIV format a20
col PATH format a60
SELECT SYS_PRIV, OBJ_PRIV, OBJECT_NAME, PATH FROM DBA_UNUSED_PRIVS
WHERE CAPTURE = 'Context Based Policy';

    SYS_PRIV             OBJ_PRIV             OBJECT_NAME                    PATH
    -------------------- -------------------- ------------------------------ ------------------------------------------------------------
    SELECT ANY TABLE                                                         GRANT_PATH('TEST_PRIV')
    SET CONTAINER                                                            GRANT_PATH('TEST_PRIV', 'CONNECT')
    CREATE INDEXTYPE                                                         GRANT_PATH('TEST_PRIV', 'RESOURCE')
    CREATE OPERATOR                                                          GRANT_PATH('TEST_PRIV', 'RESOURCE')
    CREATE TYPE                                                              GRANT_PATH('TEST_PRIV', 'RESOURCE')
    CREATE TRIGGER                                                           GRANT_PATH('TEST_PRIV', 'RESOURCE')
    CREATE PROCEDURE                                                         GRANT_PATH('TEST_PRIV', 'RESOURCE')
    CREATE SEQUENCE                                                          GRANT_PATH('TEST_PRIV', 'RESOURCE')
    CREATE CLUSTER                                                           GRANT_PATH('TEST_PRIV', 'RESOURCE')
    CREATE TABLE                                                             GRANT_PATH('TEST_PRIV', 'RESOURCE')
                         READ                 JSON$USER_COLLECTION_METADATA  GRANT_PATH('TEST_PRIV', 'RESOURCE', 'SODA_APP')
                         EXECUTE              DBMS_SODA_ADMIN                GRANT_PATH('TEST_PRIV', 'RESOURCE', 'SODA_APP')
                         EXECUTE              DBMS_SODA_USER_ADMIN           GRANT_PATH('TEST_PRIV', 'RESOURCE', 'SODA_APP')

    13 rows selected.


相關閱讀:
快速搞懂19c 數據庫安全新特性 (一)Schema Only Accounts

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章