Desbloqueio automático de usuários do SAP
Por questões de segurança, não é recomendável deixar uma senha ser testada indefinidamente sem bloqueio. Imagine um atacante na sua rede, tentando acessar seu ambiente SAP: o mesmo poderia utilizar um sistema que testaria combinações de usuário e senha e dependendo do tempo de tentativa e da qualidade da lista que ele utilizaria, poderia obter acesso ao SAP.
O SAP tem uma trava contra uma tentativa de login por BRUTE FORCE (o método de tentativa e erro): O usuário é bloqueado após 5 tentativas sem sucesso.
O parâmetro que define isso é este:
login/fails_to_user_lock (valor standard 5)
O unico porém é que após o usuário ser bloqueado, o mesmo precisa ser desbloqueado pelo ADM do SAP. Pode até ser uma política de segurança eficiente, mas como política administrativa é um porre... imagine uma rede com milhares de usuários. Imagine a quantidade de solicitações de desbloqueio que o responsável por isso teria. A profissão dele seria de Desbloqueador Oficial de Usuário.
Se alguém souber de uma solução mais elegante ou com menos gambiarra, estou aberto a sugestões. Vamos lá:
Iremos criar um programa ABAP (se38) com o nome de ZUNLOCK_ALL_USERS, com o segundo conteúdo:
*&---------------------------------------------------------------------*
*& Report ZUNLOCK_ALL_USERS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zunlock_all_users.
DATA: t_usr02 TYPE TABLE OF usr02,
t_return TYPE TABLE OF bapiret2.
DATA: wa_usr02 TYPE usr02,
wa_return TYPE bapiret2.
SELECT * FROM usr02 INTO TABLE t_usr02 WHERE uflag = 128.
IF sy-subrc = 0.
LOOP AT t_usr02 INTO wa_usr02.
FREE t_return.
CALL FUNCTION 'BAPI_USER_UNLOCK'
EXPORTING
username = wa_usr02-bname
TABLES
return = t_return.
READ TABLE t_return INTO wa_return WITH KEY type = 'E'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' .
ENDIF.
ENDLOOP.
ENDIF.
Note que este programa utiliza uma BAPI para desbloquear os usuários de acordo com o bloqueio por senha (não queremos que um usuário bloqueado pelo ADM seja desbloqueado, certo?)
Após o programa criado, testado e transportado para os devidos locais, é apenas necessário criar um job que irá executá-lo. Aqui criamos com o nome DESBLOQUEAR_ALL_USERS e execução de 5 em 5 minutos.
Pronto. Temos a proteção do usuário bloqueado por tentativas erradas e um job que desbloqueia esses usuários após 5 minutos.
Apenas lembrando que a segurança não é comprometida por que um atacante teria que esperar 5 minutos para realizar uma nova tentativa de acesso por senha. Note que podemos incrementar o programa, aumentando os tempos para tentativas sucessivas e outras coisas... Mas é assunto para um próximo artigo.