Fazer o registro dos usuários que tiveram acesso a dados pessoais ou sensíveis no cadastros.
Para esta funcionalidade é necessário habilitar a auditoria de acessos no cadastro de políticas no módulo Configurador, esta opção está com o título "auditar acesso de rotinas com campos pessoais e sensíveis".
Quando um usuário fizer acesso a um programa e tiver o acesso para visualização de dados restritos, é feito o registro deste acesso. Isso permite posteriormente identificar os usuários que possivelmente visualizaram dados restritos.
Este registro acontece utilizando a função FWPDLogUser(cFunction,nOpc). Esta função utiliza como base as referências de programas inseridas pelo módulos ou os dados do dicionário de tabelas SX2
(campo X2_SYSOBJ
) para descobrir os programas e tabelas envolvidas.
Com este mecanismo o acesso a programas direto do menu dos módulos e o consumo de serviços rest FwModel são registrados por padrão e ficam disponíveis para consulta posteriormente no relatório de Log de Acesso de usuários (APCFGR40
). Os casos que não forem registrados precisam que a pessoa desenvolvendo faça ajuste do programa e o log chamando a função FwPdLogUser
.
Para criar os recursos fundamentais no sistema é necessário a aplicação da lib, atualizada com label mínimo 20200214, e atualização do sistema com upddistr.
A aplicação do UPDDISTR pode acontecer com:
O Release 12.1.17 somente para clientes com garantia estendida |
Para o registro de log em situações não cobertas pelo padrão é necessário deixar a chamada da função FwPdLogUser
explicitamente no programa.
O primeiro parâmetro é o nome do programa sendo acessado e o segundo parâmetro é o tipo de operação sendo realizada 2-Visualizar, 3-Incluir, etc., a lista de tabelas e consequentemente os campos a serem avaliados, são conseguidos procurando pelo programa no mapeamento interno e depois no dicionário de tabelas.
O mapeamento interno utiliza a classe MpProtectedDataHash e o método GetTables(cFunction)
para identificar as tabelas que um determinado programa utiliza. Caso seja necessário atualizar, sobrescrever ou inserir novos mapeamentos programa x tabelas faça algo semelhante ao código a seguir.
cOldTables := MpProtectedDataHash():GetTables('funcaoXYZ') // retorna string 'SA1|SA2|SUS|' cNewTables := cOldTables+'ZA1|ZA2|' oLogMapping := MpProtectedDataHash():GetHash() // recupera o objeto de hash oLogMapping:Set('funcaoXYZ', cNewTables) |
O código acima adiciona duas novas tabelas para o registro do log quando o programa funcaoXYZ
for executado a partir do menu ou com a chamada da função FwPdLogUser
. Um alternativa ao código acima é utilizar o ponto de entrada PDUsrLog
que na inicialização da lista de mapeamento.
PDUSRLOG
A alternativa a mudança explícita na lista de mapeamento é utilizar o ponto de entrada. A função será invocada somente uma vez na inicialização do mapeamento.
O ponto de entrada recebe os mapeamentos já existentes e deve devolver os mesmos mais os mapeamentos adicionais. Exemplo:
user function pdusrlog(aList) aAdd(aList,'func1', '|SA1|SUS|SU5|') aAdd(aList,'func2', '|SA2|') aAdd(aList,'func2', '|SA2|') return aList |
<style> div.theme-default .ia-splitter #main { margin-left: 0px; } .ia-fixed-sidebar, .ia-splitter-left { display: none; } #main { padding-left: 10px; padding-right: 10px; overflow-x: hidden; } .aui-header-primary .aui-nav, .aui-page-panel { margin-left: 0px !important; } .aui-header-primary .aui-nav { margin-left: 0px !important; } .aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { background: #FF9900; !important } .menu-item.active-tab { border-bottom: none !important; } </style> |