Atendendo a uma reivindicação antiga, começarei a postar neste blog algumas dicas à respeito dos segredos do Protheus. E o primeiro artigo não poderia ser outro, senão sobre o misterioso sigapss.spf ( o arquivo de senhas do protheus ).
O sigapss.spf é a tabela que armazena os usuários do protheus e suas configurações. Não é um a tabela comum e, em função dessa característica, não pode ser aberta com a função dbUseArea(). Ela é um ctree SuperFile e, para que seja possível manipula-la ( incluir, excluir, alterar ou pesquisar registros ) faz-se necessário utilizar funções específicas para esse fim.
As funções a serem utilizadas são:
Internal Functions (Funcões da API ):
SPF_CanOpen(cSPFFile)->0||-1
SPF_Close(cSPFFile)
SPF_CopyTo(cSPFSource,cSPFTarget)
SPF_Delete(cSPFFile,nSPFRec)
SPF_GetFields(cSPFFile,SPFRec,@SPFId,@cSPFName,@cSPFPwd,@SPFDet)->0||-1
SPF_GoTop(cPswFile,nSPFOrder)
SPF_Insert(cSPFFile,cSPFId,cSPFuser,cSPFPassword,cSpFDet)
SPF_RecCount(cSPFFile,nSPFOrder)
SPF_Seek(cSPFFile,cSPFKeySeek,nSPFOrder) -> nSPFRec
SPF_Skip(cSPFFile,nSPFSkip,nSPFOrder)
SPF_Update(cSPFFile,@nSPFRec,cSPFId,cSPFName,cSPFPwd,cSPFDet)Advpl Functions (Funções em ADVPL ):
PswEncript(cStrEncrypt,nType) -> cStrEncrypt || cStrDecrypt
Str2Array(cSPFDet,lEncrypt) -> aSPFDet
Array2Str(aSPFDet,lEncrypt) -> cSPFDet
PswOrder(nPswOrder)
PswSeek(cPswKey) -> lFound
PswRet(nType) -> aPswDet
PswRecno() -> nPswRecno
AllGroups() -> aPswGroups
AllUsers() -> aPswUsers
PswUsrGrp(cPswUserId,cPswGroupId) -> lPswUserInPswGroupdentre outras...
Nosso primeiro exemplo será a inclusão de um novo usuário herdando as características de um usuário pré-existente. Então o primeiro passo é incluir um usuário no siga usando o módulo SIGACFG ( configurador ). Faz-se necessário, para que esse exemplo funcione, que o arquivo de senhas (sigapss.spf) esteja criado e pelo menos um usuário ( que não o Administrador ) esteja cadastrado. É altamente recomendado que todas as características do novo usuário sejam preenchidas, isso facilitará identificar cada uma delas dentro do Array com as configurações do usuário que iremos manipular.
Obs.: Utilizaremos o Protheus 10.2
Então mãos à obra.
Incluindo um usuário no Protheus:
No módulo SIGACFG acesse a opção conforme figura abaixo:
Programa: CFGX021 - Menu:SIGACFG.XNU Opção do Menu: &Ambiente->&Usuário->Senhas->Senhas de Usuario
Inclua o usuário base. No nosso exemplo: Usuario.000001:
Defina as "Restrições" do usuário:
Defina as "Outras Informações" do usuário:
Defina o "Vínculo Funcional" do usuário:
Defina o "Grupo" do usuário:
Defina as "Empresas/Filiais" e os "Módulos" aos quais o usuário terá acesso:
Defina as "Restrições de Acesso" e os "Acessos":
Defina as "Preferências de Impressão":
E assim por diante. Quanto mais detalhes forem configurados para o Usuário base, mais detalhes poderemos identificar e Manipular no sigapss.spf.
Nesse exemplo, iremos utilizar como base as características do Usuario.000001 que, no nosso caso, por ser o primeiro usuário cadastrado, também possuirá o ID 000001. Incluiremos os usuários seqüencialmente e alteraremos algumas das características.
Agora vamos ao código:
Utilizaremos a IDE do Protheus para desenvolve-lo:
Definindo constantes com o Mapeamento
das Informações do usuário
(clique na imagem para ampliá-la)
Inserindo um novo usuário no sigapss.spf
(clique na imagem para ampliá-la)
Função para Obter um usuário válido
(clique na imagem para ampliá-la)
Para executar e depurar o programa utilize a IDE do Protheus conforme imagem abaixo:
Detalhes das informações do usuário retornado do sigapss.spf:
Para obter o código de exemplo completo clique
aqui
Boa tarde Naldo.
ResponderExcluirExcelente Post... há tempos venho pensando em escrever um blog sobre Tecnologia Protheus.
Um Abraço,
Hélio Costa
Infra/Materiais
Muito bom!!!! Fantastico consegui descobrir a senha de todo mundo.
ResponderExcluirOla Naldo,
ResponderExcluirTenho uma dúvida apartir desta sua diga seria possivel criar um algoritimo que mudasse a senha do usuario automaticamente.
Exemplo:
Toda 00:00hs ele mudaria a senha de um determinado usuario baseado-se no logaritimo simples(data * 2) só um exemplo.
Obrigado.
Alex Seabra
Alex,
ResponderExcluiré possível sim.
É possível descobrir a senha do admin com isso tudo ?
ResponderExcluirDe uma certa forma sim....
ResponderExcluirNaldo,
ResponderExcluirJá testou isso na versão 11 do Protheus? pois acredito que mudaram o arquivo de senhas, e não consegui utilizá-lo na versão 11.
Vc tem algum que funcione para 11?
Obrigado,
Marcos
Houve atualização no arquivo ou nas funções, após atualização do p10 no momento do update ou insert, esta dando um erro: invalid protected call in file: ctreefair\cpp
ResponderExcluirAlguem ja viu esse erro?
Recentemente, ao fazer a atualização do meu ambiente, comecei a receber esta mesma mensagem ao chamar a função SPF_GETFIELDS().
ResponderExcluirPara contornar isto apenas mudei a minha função de User Function para Static Function, pois aparentemente foi inserida alguma trava para a chamadas destas funções de API via User Function.
Att.,
Tiago Bandeira Brasiliano
Parece que várias funções relativas ao .SPF foram alteradas pela TOTVs e pararam de funcionar no Protheus 11.
ResponderExcluirMuito bom o blog. Sempre passo por aqui. Outro muito interessante: http://microsigadvpl.blogspot.com
Naldo,
ResponderExcluirEstou utilizando a função PswEncript(variavel, 1) e a mesma não está retornado a senha decriptando a senha. Você tem idéia do que pode está acontecendo?.
Muito obrigado,
Manoel
Manoel,
ResponderExcluirA Totvs/Microsiga alterou o comportamento das funções de manipulação do "SuperFile" de senhas. Então, as dicas apresentadas neste "post", se estiver com uma versão atualizada do Protheus, não irão funcionar.
É uma pena, a Totvs/Microsiga, ao invés de impor bloqueio deveria criar facilitadores para automatizar o processo de inclusão, bloqueio e/ou exclusão de usuários no protheus. Qualquer bom sistema tem isso. Conseguimos fazer isso fácilmente no Linux, em qualquer aplicação do Windows (inclusive no próprio SO) nos SGBDs, etc. Mas, infelizmente, tem algumas pessoas com pensamentos retrógrados... Querem proteger o sistema de quem/de que? (rs).
[]s
иαldσ dj
Naldo, desculpe reviver o post mas estou com algumas duvidas qnto as senhas do protheus.
ResponderExcluirVoce acha que eh possivel ou conhece alguma funcao para alterar senha de usuario?
Obrigado :)
Ferne$,
ResponderExcluirO que posso te responder....
Se hoje fosse: terça-feira, 25 de novembro de 2008 eu diria que sim, mas, após essa data várias mudanças foram feitas no protheus.
Preciso pesquisar.
Ótimo seria se a totvs já tivesse implementado a função UsrChgPwd(cUserId,cNewPwd).
[]s
иαldσ dj
..eai? A Totvs impos um limite e venceu?
ResponderExcluir..acho que nao!
Naldo. Boa tarde. Tudo bem? Estou criando uma rotina para alteração de usuários.
ResponderExcluirEstou mudando os usuários cadastrados na empresa 01 e filial 01 para empresa 03 e filial 03.
Ao finalizar a rotina ele corrompe o arquivo, não deixando abrir os detalhes dos usuários.
Poderia passar um exemplo?
Abraços,
Anônimo,
ResponderExcluirObserve a data do post: terça-feira, 25 de novembro de 2008
de lá pra cá muitas coisas foram alteradas e várias restrições adicionadas na manipulação do sigapss.spf.
Sugestão: Entre em contato com o suporte da totvs.
[]s
Naldo.
ResponderExcluirObrigado por responder. Solicitei apoio junto a Totvs e a mesma não tem nenhuma documentação. Não sugere manipular o arquivo.
Ainda assim acredito que é possível. Porem como você disse. Muita coisa mudou. Preciso descobrir o que.
Para tratar o problema acima.
Anônimo(Anderson)
Abraços,
Qual versão?
ResponderExcluirEstou com a versão 10
ResponderExcluirNaldo, conforme o Tiago Ribeiro comentou,
ResponderExcluirse jogar tudo pra dentro de uma Static Function está funcionando tudo perfeitamente...
Rsrs, Tiago Bandeira, não Ribeiro...
ResponderExcluirNaldo boa tarde!
ResponderExcluirAproveitando o tópico, sabe dizer se existe um procedimento para migrar os dados contidos em um sigapss antigo para um criado em branco?
Só pra voce entender, existem uma funcioalidade no portal do rh que só funciona quando deleto o arquivo sigapss e deixo o sistema criar em branco, ou seja, se eu quiser utilizar terei que recadastrar todas as senhas na mão no novo arquivo, o que é praticamente inviável devido a quantidade.
Se souber de algum procedimento por favor me fale.
abraços
Bom dia,
ResponderExcluirUtilizei o exemplo acima no Protheus 10 e funcionou. Porém, ao utilizar o mesmo exemplo no Protheus 11, não funcionou, para ser mais exato, o problema ocorre na função spf_seek que só retorna -1. Será que a Totvs descontinuou esta função no Protheus 11?
Atenciosamente,
Flavio Valentin
Bom dia,
ResponderExcluirUtilizei o exemplo acima no Protheus 10 e funcionou. Porém, ao utilizar o mesmo exemplo no Protheus 11, não funcionou, para ser mais exato, o problema ocorre na função spf_seek que só retorna -1. Será que a Totvs descontinuou esta função no Protheus 11?
Atenciosamente,
Flavio Valentin
Bom dia,
ResponderExcluirainda nao ha uma descriçao para utilizar a funçao allusers() e saver qual é o dado de cada posiçao do array?
Muito obrigado.
Atenciosamente,
Sergio
Bom dia,
ResponderExcluirainda nao ha uma descriçao para utilizar a funçao allusers() na versao Protheus11 e saver qual é o dado de cada posiçao do array?
Muito obrigado.
Atenciosamente,
Sergio
Pessoal, alguem conseguiu resolver o sigapss.spf no protheus 11?
ResponderExcluiratt
Celso Martins
No Configurador do Protheus 11 é possivel configurar uma validação de senhas, quando o usuario for trocar a senha de acesso ao Protheus. Em Regras de Senhas -> Regras de Preenchimento. Lá é possivel configurar o tamanho da senha, se é obrigatório ter numeros e letras, etc. (rotina CFGA500).
ResponderExcluirGostaria de usar essa mesma validação para acesso ao RH On Line, ou seja, quando o funcionário for alterar a senha de acesso, a rotina deve criticar a senha digitada, baseada na Regra de Senhas do Configurador.
Naldo, isso é possivel ?
Grande "pequeno" amigo Isamu. O "RH OnLine" permite várias personalizações, inclusive no que diz respeito a validações de senhas. Será que a rotina CFGA500 está disponível para uso que não seja apenas pena CFGA500, se sim, a resposta é: Sim é possível. Caso contrário, mesmo que CFGA500 não esteja disponível para uso "externo" a forma de validação e configuração de senha no RH OnLine é passível de validação e de acordo com customização do "usuário". Isso foi previsto para toda e qualquer rotina do RH OnLine.
ExcluirPS.: A não ser que os novos implementadores e mantenedores das "rotinas/programas" do RH OnLine tenham modificado o conceito, é fácil customizar, alterar e manter, ao gosto do cliente.
Att.:
иαldσ dj
Boa tarde Naldo!
ResponderExcluirSabe se é possivel varrer todos os usuários em um laço para realizar a alteração de um campo?
No caso seria o e-mail do usuario está em branco e necessitarmos adicionar todos, como os usuarios são iguais ao e-mail era so realizar esse update concatenando com @email
Agradeço desde já.
Vlw pelo post Naldo, ficou claríssimo!
ResponderExcluirTambém mantenho um BLOG sobre o Protheus e sei como é difícil manter uma frequencia de posts com essa correria que temos no nosso dia a dia. Parabéns e obrigado!
Até mais Naldo!
www.userfunction.com.br
Estou precisando descriptografar o arquivo sigapss.spf para replicar para outras bases automaticamente alguém já fez isso
ResponderExcluirGostaria de descriptografar o arquivo sigapss.spf para replicar para outras bases de dados, alguém já fez isso
ResponderExcluirBoa tarde,
ResponderExcluirEstou precisando crear um relatório com todas as informações do usuario. Incluindo os privilegios que ele possua (privilegios, nao acessos).
Alguém conhece alguma função que retornar os privilegios e os usuarios associadas a ela?
Obrigado
Felipe
Boa tarde, Existe um relatório chamado APCFG40, onde ele lista esses privilégios de um usuário específico, mas não se uma função (que é infelizmente o que eu precisava também), mas não encontrei esse fonte para poder customizar, e a TOTVS não libera ele (mesmo sendo um relatório). Para liberar esse fonte no ações relacionadas do Cadastro de usuários no configurador, tem que habilitar o parametro MV_CFGREL3 e marca-lo como ".T."
ExcluirBoa tarde,
ResponderExcluirEstou precisando crear um relatório com todas as informações do usuario. Incluindo os privilegios que ele possua (privilegios, nao acessos).
Alguém conhece alguma função que retornar os privilegios e os usuarios associadas a ela?
Obrigado
Felipe
Boa tarde.
ResponderExcluirVoces teriam o esquema para mandar na qual consigo alterar informacoes de usuarios por lote??
obrigado!!
abs
Boa tarde, como faço para alterar o id de acesso do usuário?
ResponderExcluirExemplo criei o usuario como o nome joao.nascimento
para acessar o totvs eu coloco o id joao.nascimento e a senha
Quero alterar este id de usuário para acessar o totvs somente como joao
Teria como me auxiliar neste procedimento?