Oracle 12C Study--12c新特性-權限分析

Oracle 12C Study--12c新特性-權限分析


    Oracle 12c致力於雲計算服務,安全是雲計算方案中最重要的一環。而對數據庫訪問權限的管理,也涉及到安全的各個方面。如果能對用戶訪問數據庫的權限做到精細化管理,無論是對數據庫的管理和應用都是一個很好的福音。

    Oracle 12c提供了一個有力的工具DBMS_PRIVILEGE_CAPTURE,可以通過建立分析策略,對分配給用戶的權限跟蹤、分析、生成使用報告,從而對用戶在應用中所有使用的權限和未使用的權限有一個清晰的掌控。根據管理需求,可對用戶從未使用的權限進行回收,達到權限的精細化管理。

 一、權限分析流程


二、案例:分析用戶權限的使用情況


11:53:16 SYS@ orcl>select * from v$version;


BANNER                                                   CON_ID

--------------------------------------------------------------------Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production              0

PL/SQL Release 12.1.0.2.0 - Production         0

CORE    12.1.0.2.0      Production                          0

TNS for Linux: Version 12.1.0.2.0 - Production   0

NLSRTL Version 12.1.0.2.0 - Production               0

Elapsed: 00:00:00.01


1、建立權限捕獲策略

10:26:51 SYS@ orcl>exec sys.dbms_privilege_capture.create_capture(-

10:27:46 > name=> 'All_privs', -

10:27:51 > description=>'All privs used', -

10:27:58 > type => dbms_privilege_capture.g_database);

PL/SQL procedure successfully completed.


2、執行捕獲策略

10:28:07 SYS@ orcl>exec sys.dbms_privilege_capture.enable_capture( name=>'All_privs');

PL/SQL procedure successfully completed.


3、建立測試用戶並分配權限

10:34:50 SYS@ orcl>create user tom identified by tom;

User created.

10:35:10 SYS@ orcl>create user rose identified by rose;

User created.

10:35:26 SYS@ orcl>grant create session to tom,rose;

Grant succeeded.

10:35:41 SYS@ orcl>create role r1;

Role created.

10:39:59 SYS@ orcl>grant all on scott.emp to r1;

Grant succeeded.

10:40:12 SYS@ orcl>grant r1 to tom,rose;

Grant succeeded.

10:40:33 SYS@ orcl>alter user tom quota 10m on users;

User altered.

10:41:00 SYS@ orcl>alter user rose quota 10m on users;

User altered.

10:41:49 SYS@ orcl>grant create table ,select any table to tom,rose;

Grant succeeded.


4、測試用戶登錄並訪問數據庫

Tom 用戶登錄數據庫:

10:43:16 TOM@ orcl>r

  1* create table t1 (id int)

Table created.

10:44:01 TOM@ orcl>select * from scott.emp1;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- 

      7369 SMITH      CLERK           7902 17-DEC-80       1800                    20

      7499 ALLEN      SALESMAN        7698 20-FEB-81       2600        300         30

      7521 WARD       SALESMAN        7698 22-FEB-81       2250        500         30

      7566 JONES      MANAGER         7839 02-APR-81       3975                    20

      7654 MARTIN     SALESMAN        7698 28-SEP-81       2250       1400         30

      7698 BLAKE      MANAGER         7839 01-MAY-81       3850                    30

10:44:14 TOM@ orcl>delete from scott.emp;

14 rows deleted.

10:44:37 TOM@ orcl>rollback;

Rollback complete.

  

Rose用戶登錄數據庫:

10:45:59 SYS@ orcl>conn rose/rose

Connected.

10:46:02 ROSE@ orcl>create table t1 (id int);

Table created.

10:46:15 ROSE@ orcl>select * from scott.emp;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ----------       7369 SMITH      CLERK           7902 17-DEC-80       1800                    20

      7499 ALLEN      SALESMAN        7698 20-FEB-81       2600        300         30

      7521 WARD       SALESMAN        7698 22-FEB-81       2250        500         30

      7566 JONES      MANAGER         7839 02-APR-81       3975                    20

      7654 MARTIN     SALESMAN        7698 28-SEP-81       2250       1400         30

      7698 BLAKE      MANAGER         7839 01-MAY-81       3850                    30

10:46:21 ROSE@ orcl>update scott.emp set sal=sal+3000;

14 rows updated.

11:00:23 ROSE@ orcl>commit;

Commit complete.


5、權限捕獲完成

10:43:48 SYS@ orcl>exec sys.dbms_privilege_capture.disable_capture(name=>'All_privs');

PL/SQL procedure successfully completed.


6、生成權限捕獲結果

11:02:09 SYS@ orcl>exec sys.dbms_privilege_capture.generate_result(name=>'All_privs');

PL/SQL procedure successfully completed.


7、查看權限捕獲結果

查看用戶已使用的權限:(對象權限)

11:07:19 SYS@ orcl>select capture,username,object_owner,object_name,OBJ_PRIV

  2   from dba_used_objprivs

  3  where username in ('TOM','ROSE')

  4  and object_name not in

  5* ('DBMS_APPLICATION_INFO','PRODUCT_PRIVS','DUAL') ORDER BY USERNAME

CAPTURE        USERNAME   OBJECT_OWN OBJECT_NAME     OBJ_PRIV

-------------- ---------- ---------- --------------- 

All_privs      ROSE       SCOTT      EMP             UPDATE

All_privs      ROSE       SCOTT      EMP             READ

All_privs      TOM        SYS        TAB             SELECT

All_privs      TOM        SCOTT      EMP             DELETE


系統權限:

11:08:33 SYS@ orcl>SELECT USERNAME,SYS_PRIV from dba_used_sysprivs

11:08:42   2   where username in ('TOM','ROSE');

USERNAME   SYS_PRIV

---------- ----------------------------------------

ROSE       CREATE SESSION

TOM        SELECT ANY TABLE

TOM        CREATE SESSION

ROSE       CREATE TABLE

TOM        CREATE TABLE


查看通過role獲取的權限:

11:08:50 SYS@ orcl>col path for a32

11:09:25 SYS@ orcl>select username,obj_priv,object_name,path

11:09:37   2  from dba_used_objprivs_path

11:09:48   3  where username in ('TOM','ROSE')

11:10:00   4  and object_name not in('DBMS_APPLICATION_INFO','PRODUCT_PRIVS','DUAL') ORDER BY USERNAME;


USERNAME   OBJ_PRIV                                 OBJECT_NAME     PATH

---------- ---------------------------------------- --------------- 

ROSE       READ                                EMP     GRANT_PATH('ROSE', 'R1')

ROSE       UPDATE                              EMP     GRANT_PATH('ROSE', 'R1')

TOM        SELECT                              TAB     GRANT_PATH('PUBLIC')

TOM        DELETE                             EMP      GRANT_PATH('TOM', 'R1')

12:21:25 SYS@ orcl>col role for a10

12:21:36 SYS@ orcl>col owner for a10

12:21:44 SYS@ orcl>col table_name for a10

12:21:51 SYS@ orcl>r

  1  select role,owner,TABLE_NAME, PRIVILEGE from role_tab_privs

  2*  where  role='R1'


ROLE       OWNER      TABLE_NAME PRIVILEGE

---------- ---------- ---------- ----------------------------------------

R1         SCOTT      EMP        QUERY REWRITE

R1         SCOTT      EMP        SELECT

R1         SCOTT      EMP        DEBUG

R1         SCOTT      EMP        DELETE

R1         SCOTT      EMP        FLASHBACK

R1         SCOTT      EMP        READ

R1         SCOTT      EMP        ON COMMIT REFRESH

R1         SCOTT      EMP        ALTER

R1         SCOTT      EMP        INSERT

R1         SCOTT      EMP        UPDATE


11:12:50 SYS@ orcl>col obj_priv for a30

11:13:08 SYS@ orcl> select username,sys_priv,obj_priv,object_name,path

  2   from dba_unused_privs

  3* where username in ('TOM','ROSE')


USERNAME   SYS_PRIV   OBJ_PRIV                       OBJECT_NAM PATH

---------- ---------- ------------------------------ ---------- 

ROSE                  FLASHBACK                EMP    GRANT_PATH('ROSE', 'R1')

ROSE                  DEBUG                    EMP    GRANT_PATH('ROSE', 'R1')

ROSE                  QUERY REWRITE            EMP    GRANT_PATH('ROSE', 'R1')

ROSE                  ON COMMIT REFRESH        EMP    GRANT_PATH('ROSE', 'R1')

ROSE                  SELECT                   EMP    GRANT_PATH('ROSE', 'R1')

ROSE                  INSERT                   EMP    GRANT_PATH('ROSE', 'R1')

ROSE                  DELETE                   EMP    GRANT_PATH('ROSE', 'R1')

ROSE                  ALTER                    EMP    GRANT_PATH('ROSE', 'R1')

ROSE       SELECT ANY                                 GRANT_PATH('ROSE')

            TABLE


TOM           FLASHBACK                       EMP     GRANT_PATH('TOM', 'R1')

TOM            DEBUG                          EMP      GRANT_PATH('TOM', 'R1')

TOM            QUERY REWRITE                  EMP      GRANT_PATH('TOM', 'R1')

TOM            ON COMMIT REFRESH              EMP      GRANT_PATH('TOM', 'R1')

TOM           READ                           EMP       GRANT_PATH('TOM', 'R1')

TOM          UPDATE                         EMP        GRANT_PATH('TOM', 'R1')

TOM          SELECT                         EMP        GRANT_PATH('TOM', 'R1')

TOM          INSERT                         EMP        GRANT_PATH('TOM', 'R1')

TOM          ALTER                          EMP        GRANT_PATH('TOM', 'R1')


18 rows selected.

  ---通過以上視圖,可以獲取用戶從未使用過的權限的情況,可以根據管理需要,回收用戶從未使用過的權限。

8、刪除捕獲策略,刪除前需要禁用策略

11:14:58 SYS@ orcl>select name,type,enabled,roles ,context from dba_priv_captures;

NAME            TYPE       ENABLED    ROLES                CONTEXT

--------------- ---------- ---------- -------------------- --------------------

All_privs       DATABASE   N

ORA$DEPENDENCY  DATABASE   N


11:15:10 SYS@ orcl>exec sys.dbms_privilege_capture.drop_capture(name=>'All_privs');

PL/SQL procedure successfully completed.


11:16:22 SYS@ orcl>select username,sys_priv,obj_priv,object_name,path

11:17:16   2  from dba_unused_privs

11:17:25   3  where username in ('TOM','ROSE');

no rows selected


12:29:50 SYS@ orcl>select username,obj_priv,object_name,path

12:30:11   2    from dba_used_objprivs_path

12:30:11   3    where username in ('TOM','ROSE')

12:30:11   4    and object_name not in('DBMS_APPLICATION_INFO','PRODUCT_PRIVS','DUAL') ORDER BY USERNAME;

no rows selected

 

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