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

Posted SQLplusDB

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速搞懂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

以上是关于快速搞懂Oracle 19c安全新特性 Privilege Analysis(权限分析)的主要内容,如果未能解决你的问题,请参考以下文章

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

快速搞懂Oracle 19c 安全新特性 Schema Only Accounts

快速搞懂Oracle 19c 安全新特性 Schema Only Accounts

快速搞懂Oracle 19c 安全新特性 Schema Only Accounts

Oracle 19c 新特性 Automatic indexing 自动化索引

圣诞快乐:Oracle Database 19c 的10大新特性一览