Você está na página 1de 6

Oracle Database: Segurança de usuario - Privilege Analysis

- Ambiente
S.O: Oracle Linux 8
SGBD: Oracle 19c
Banco: Single Instance com Multitenant (CDB e PDBs)

Versões que se aplica: 12c e superior


Somente para Enterprise Edition
Se aplica a ambientes Multitenant ou não

##############################################

Referencia: https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/
performing-privilege-analysis-identify-privilege-use.html#GUID-44CB644B-7B59-4B3B-
B375-9F9B96F60186

--> Definição
- E uma feature que faz o rastreio de uso de privilegios pelos usuários no
banco de dados, e o mesmo que as auditorias fazem, porem ao invez de fazer a nivel
de objetos faz a nivel de privilegio.
- Simplificando muito a análise de privilégios, que por sua vez permite
revogar privilégios desnecessários e atingir um estado de privilégio mínimo.

--> Objetivo
- Analisa dinamicamente os privilégios e funções que os usuários usam e não
usam.
- Aumenta a segurança de seus aplicativos e operações de banco de dados,
ajudando você a implementar práticas recomendadas de privilégio mínimo para funções
e privilégios de banco de dados.

--> Tipos de Privilege Analysis


- Captura de uso de privilégios baseada em contexto: Você deve especificar
uma expressão booleana apenas com a função SYS_CONTEXT. Os privilégios usados serão
capturados se a condição for avaliada como TRUE. Esse método pode ser usado para
capturar privilégios e funções usados por um usuário do banco de dados
especificando o usuário em SYS_CONTEXT.
- Captura de uso de privilégios baseada em função: Você deve fornecer uma
lista de funções. Se as funções na lista estiverem habilitadas na sessão do banco
de dados, os privilégios usados para a sessão serão capturados. Você pode capturar
o uso de privilégios para os seguintes tipos de funções: funções padrão do Oracle,
funções criadas pelo usuário, funções de controle de acesso baseado em código
(CBAC) e funções de aplicativos seguros.
- Captura de uso de privilégio baseado em função e contexto. Você deve
fornecer uma lista de funções ativadas e uma expressão booleana SYS_CONTEXT para a
condição. Quando qualquer uma dessas funções é habilitada em uma sessão e a
condição de contexto fornecida é satisfeita, o Privilege Analysis começa a capturar
o uso do privilégio.
- Captura de privilégios em todo o banco de dados. Se você não especificar
nenhum tipo em sua política de análise de privilégios, serão capturados os
privilégios usados no banco de dados, exceto aqueles para o usuário SYS. (Isso
também é conhecido como análise incondicional, porque é ativado sem quaisquer
condições.)
--> Restrições do Privilege Analysis:
- Você pode habilitar apenas uma política de Privilege Analysis por vez. A
única exceção é que você pode ativar uma política de análise de privilégios para
todo o banco de dados ao mesmo tempo que uma política de análise de privilégios que
não abrange todo o banco de dados, como uma política de análise orientada por
atributo de contexto ou função.
- Você não pode analisar os privilégios do usuário SYS.
- O Privilege Analysis mostra os caminhos de grant para o privilégio, mas não
sugere qual caminho de grant manter.
- Se a função, o usuário ou o objeto tiver sido eliminado, os valores que
refletem as capturas de privilégios para eles nas views do dicionário de dados do
Privilege Analysis também serão eliminados.

--> Como utilizar

- Criar usuario para a simulação


rodar variaves de ambiente
sqlplus / as sysdba

se multitenant
SQL> alter session set container=PDB01;
create user dbacaradenada identified by dbacaradenada;
grant dba, resource to dbacaradenada;

-- Atribuir privilegio necessário a usuarios


Obs: Para usar o Privilege Analysis, você deve receber a função CAPTURE_ADMIN.

rodar variaves de ambiente


sqlplus / as sysdba

se multitenant
SQL> alter session set container=PDB_NAME;

SQL> grant CAPTURE_ADMIN to user;

-- Vizualizar politicas de Privilege Analysis existentes

rodar variaves de ambiente


sqlplus / as sysdba

se multitenant
SQL> alter session set container=PDB01;

col name format a15;


col roles format a20;
col context format a30;
set pagesize 5000;
set linesize 300;
select name, type, enabled, roles, context
from dba_priv_captures
order by name;

-- Criar politicas de Privilege analises

Tipos:
- G_DATABASE : Analisa todos os usos de privilégios no banco de dados, exceto
o usuário SYS. Os parâmetros ROLES e CONDITION não são necessários.
- G_ROLE : Analisa todo o uso de privilégios pelas funções especificadas no
parâmetro ROLES. Use a função ROLE_NAME_LIST para especificar as funções.
- G_CONTEXT : Analisa todos os usos de privilégios quando a expressão
booleana especificada no parâmetro CONDITION é avaliada como TRUE. As condições
podem incluir combinações de chamadas para o SYS_CONTEXT.
- G_ROLE_AND_CONTEXT : Analisa todos os usos de privilégios quando os
critérios ROLES e CONDITION são verdadeiros.

rodar variaves de ambiente


sqlplus / as sysdba

se multitenant
SQL> alter session set container=PDB01;

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

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

Ver todas as roles do banco de dados

col role format 999999;


col role format a30;
col common format a10;
set pagesize 5000;
set linesize 300;
select role_id, role, common
from dba_roles
order by 1;

- G_CONTEXT
begin
dbms_privilege_capture.create_capture(
name => 'CONT_POL',
type => dbms_privilege_capture.g_context,
condition => 'sys_context(''userenv'', ''session_user'') = ''DBACARADENADA'''
);
end;
/

- G_ROLE_AND_CONTEXT).
begin
dbms_privilege_capture.create_capture(
name => 'ROLE_CONT_POL',
type => dbms_privilege_capture.g_role_and_context,
roles => role_name_list('DBA', 'RESOURCE'),
condition => 'sys_context(''userenv'', ''session_user'') = ''DBACARADENADA'''
);
end;
/

-- Habilitar e desabilitar uma politica de Privilege Analysis

rodar variaves de ambiente


sqlplus / as sysdba

se multitenant
SQL> alter session set container=PDB01;

- Habilitar

SQL> exec dbms_privilege_capture.enable_capture('ROLE_CONT_POL');

- Desabilitar

SQL> exec dbms_privilege_capture.disable_capture('ROLE_CONT_POL');

-- Fazer alguma operações com o usuario DBACARADENADA para a simulação

rodar variaves de ambiente


sqlplus dbacaradenada@PDB01

create table dbacaradenada.tab1 (


id number,
description varchar2(50),
constraint tab1_px primary key (id)
);

create sequence dbacaradenada.tab1_seq;

create view dbacaradenada.tab1_view as select * from tab1;

insert into dbacaradenada.tab1 select level, 'Description of ' || to_char(level)


from dual connect by level <= 5;
commit;

select name from v$database;

Obs: apos as execuções desabilitar politica de captura

-- Gerar resultados da captura

rodar variaves de ambiente


sqlplus / as sysdba

se multitenant
SQL> alter session set container=PDB01;

SQL> exec dbms_privilege_capture.generate_result('ROLE_CONT_POL');


-- Ver resultados de politicas de Privilege Analysis

rodar variaves de ambiente


sqlplus / as sysdba

se multitenant
SQL> alter session set container=PDB01;

- Ver privilegios do sistema usados durante a captura


col username format a20
col sys_priv format a20
set pagesize 5000;
set linesize 300;
select username, sys_priv
from dba_used_sysprivs
where capture = 'ROLE_CONT_POL'
order by username, sys_priv;

- Ver como os privilegios de sistema foram concedidos aos usuarios


col username format a20;
col used_role format a30;
col sys_priv format a20;
col path format a50;
set pagesize 5000;
set linesize 300;
select username, sys_priv, used_role, path
from dba_used_sysprivs_path
where capture = 'ROLE_CONT_POL'
order by username, sys_priv;

- Ver privilegios de objeto usados durante a captura


col username format a20;
col obj_priv format a8;
col object_owner format a15;
col object_name format a20;
col object_type format a11;
set pagesize 5000;
set linesize 300;
select username, obj_priv, object_owner, object_name, object_type
from dba_used_objprivs
where capture = 'ROLE_CONT_POL';

- Ver como os privilegios de objeto foram concedidos aos usuarios


column username format a20;
column obj_priv format a8;
column object_owner format a15;
column object_name format a20;
column used_role format a20;
column path format a30;
set pagesize 5000;
set linesize 300;
select username, obj_priv, object_owner, object_name, used_role, path
from dba_used_objprivs_path
where capture = 'ROLE_CONT_POL';

-- Apagar politicas de Privilege Analysis


rodar variaves de ambiente
sqlplus / as sysdba

se multitenant
SQL> alter session set container=PDB01;

SQL> exec dbms_privilege_capture.drop_capture('ROLE_CONT_POL');

Você também pode gostar