Encontrar privilégios não utilizados com privilege analysis
OracleSegurançaComando
-- 1) Capture privilege usage for a specific user:
BEGIN
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
name => 'CAP_APP_USER',
description => 'Actual privilege usage of the application user',
type => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
condition => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''CUSTOMER_APP''');
DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE(name => 'CAP_APP_USER', run_name => 'RUN_2026_10');
END;
/
-- Other types: G_DATABASE (whole DB), G_ROLE (roles => role_name_list('DBA')), G_ROLE_AND_CONTEXT
-- 2) After a representative workload (including month end), stop and generate results:
BEGIN
DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE(name => 'CAP_APP_USER');
DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT(name => 'CAP_APP_USER', run_name => 'RUN_2026_10');
END;
/
-- 3) Used and never-used privileges:
SELECT username, sys_priv, obj_priv, object_owner, object_name, used_role
FROM dba_used_privs WHERE capture = 'CAP_APP_USER';
SELECT username, sys_priv, obj_priv, object_owner, object_name
FROM dba_unused_privs WHERE capture = 'CAP_APP_USER';
-- 4) Through which role chain was the privilege used?
SELECT username, sys_priv, used_role, path
FROM dba_used_sysprivs_path WHERE capture = 'CAP_APP_USER';
-- 5) Cleanup:
EXEC DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE(name => 'CAP_APP_USER');O que faz
A privilege analysis registra em tempo de execução quais privilégios de sistema/objeto são de fato usados no escopo escolhido (banco inteiro, role, condição); o resultado lista os privilégios não utilizados para que REVOKEs possam ser planejados segundo o princípio do menor privilégio.
Quando usar
Ao limpar contas de aplicação com privilégios DBA/ANY, em revisões de privilégios antes de uma auditoria e para descobrir o que uma aplicação de pacote realmente precisa.
Atenção
Incluída no Enterprise Edition desde 2018 (antes exigia licença do Database Vault); sem licença extra. Há um pequeno overhead durante a captura. O resultado reflete apenas a carga da janela de captura: se jobs de fim de mês, fim de ano ou de emergência não rodaram, um privilégio mostrado como "não utilizado" ainda pode ser necessário, então revogue gradualmente. Só uma captura pode estar habilitada por vez; a única exceção é que uma captura G_DATABASE pode ser habilitada junto com uma captura de role ou de contexto.
Relacionados
- Criar, abrir, definir a master key e fazer backup de um keystore TDE (19c+)
- Criptografar tablespaces com TDE (novos e existentes, online/offline)
- Criar uma política de Unified Auditing, habilitá-la com condição, revisar os registros e removê-la
- Adicionar uma política de acesso em nível de linha com VPD (DBMS_RLS)
- Criar um profile de política de senhas e atribuí-lo a usuários