01. O QUE É?
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".
02. COMO FUNCIONA
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:
- pacote diferencial de upgrade para o Release 12.1.27;
- pacote específico para Dados Protegidos, nos Releases 12.1.17, 12.1.23 e 12.1.25.
O Release 12.1.17 somente para clientes com garantia estendida
03. FAZENDO O REGISTRO
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.
04. PONTO DE ENTRADA 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
05. ASSUNTOS RELACIONADOS