PROTEGER DBF

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ANTONIOM
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 11 Set 2004 07:26

PROTEGER DBF

Mensagem por ANTONIOM »

Caros Colegas,

Alguem poderia me sugerir como proteger meus dbfs contra leitura externa (pelo dbu por exemplo) da uma forma mais simples possivel ???? Teria algum jeito de protege-los sem modificar (ou fazer poucas alteracoes) nos fontes do sistema ????

Agradeco a todos desde ja
gransoft
Usuário Nível 3
Usuário Nível 3
Mensagens: 321
Registrado em: 06 Jul 2004 17:48
Localização: UBERLÂNDIA-MG
Contato:

Proteger DBF's...

Mensagem por gransoft »

ARAGUARI-MG, 11 de setembro de 2004.

Prezado Antônio,

Verifique:

Código: Selecionar todos

FUNCTION Protege(xcArquivo,cCond)
LOCAL nBytesL, nBytesG, nHandle, cBuffer := SPACE(01)
IF (VALTYPE(xcArquivo) <> "C") .OR. (xcArquivo == NIL)
   RETURN(.F.)
END
IF (VALTYPE(cCond) <> "C") .OR. (cCond == NIL)
   RETURN(.F.)
END
nHandle := FOPEN(xcArquivo,2)  && ABRE ARQUIVO PARA LEITURA/GRAVACAO
*
IF (nHandle == -1)
   Beep(1)
   SETCOLOR(cCor5)
   DO CASE
      CASE FERROR() ==  0
         Mensagem("*** SUCESSO ***")
      CASE FERROR() ==  1
         Mensagem("*** NUMERO DE FUNCAO INVALIDO ***")
      CASE FERROR() ==  2
         Mensagem("*** ARQUIVO NAO ENCONTRADO ***")
      CASE FERROR() ==  3
         Mensagem("*** PATH NAO ENCONTRADO ***")
      CASE FERROR() ==  4
         Mensagem("*** MUITOS ARQUIVOS ABERTOS ***")
      CASE FERROR() ==  5
         Mensagem("*** ACESSO NEGADO ***")
      CASE FERROR() ==  6
         Mensagem("*** HANDLE INVALIDO ***")
      CASE FERROR() ==  7
         Mensagem("*** BLOCOS DE CONTROLE DE MEMORIA DESTRUIDOS ***")
      CASE FERROR() ==  8
         Mensagem("*** MEMORIA INSUFICIENTE ***")
      CASE FERROR() == 15
         Mensagem("*** ESPECIFICADO UM DRIVE INVALIDO ***")
      CASE FERROR() == 19
         Mensagem("*** TENTATIVA DE GRAVAR EM DISCO PROTEGIDO ***")
      CASE FERROR() == 21
         Mensagem("*** DISCO NAO PRONTO ***")
      CASE FERROR() == 23
         Mensagem("*** ERRO DE CRC ***")
      CASE FERROR() == 29
         Mensagem("*** ERRO DE GRAVACAO ***")
      CASE FERROR() == 30
         Mensagem("*** ERRO DE LEITURA ***")
      CASE FERROR() == 32
         Mensagem("*** VIOLACAO DE COMPARTILHAMENTO ***")
      CASE FERROR() == 33
         Mensagem("*** VIOLACAO DE TRAVAMENTO ***")
   ENDCASE
   SETCOLOR(cCor0)
   RETURN(.F.)                          && NAO ABRIU O ARQUIVO - PROBLEMAS ...
END
nBytesL := FREAD(nHandle,@cBuffer,1)
IF (nBytesL != 1)                       && NAO LEU O 1. BYTE - PROBLEMAS ...
   RETURN(.F.)
END
*
DO CASE 
   CASE (cCond == "P")
      cBuffer := IF( ASC(cBuffer)==  3,   CHR(4), cBuffer)
      cBuffer := IF( ASC(cBuffer)==131, CHR(132), cBuffer)
   CASE (cCond == "D")
      cBuffer := IF( ASC(cBuffer)==  4,   CHR(3), cBuffer)
      cBuffer := IF( ASC(cBuffer)==132, CHR(131), cBuffer)
   OTHERWISE
      RETURN(.F.)
ENDCASE
*
FSEEK(nHandle,0,0)                     && POSICIONA O PONTEIRO ...
nBytesG := FWRITE(nHandle,cBuffer,1)
IF (nBytesG != 1)                      && NAO GRAVOU O 1. BYTE - PROBLEMAS ...
   RETURN(.F.)
END
FCLOSE(nHandle)
RETURN(.T.)
***
Atenciosamente,
Janis Peters Grants.

http://www.gransoft.com.br
gransoft@zipmail.com.br
Avatar do usuário
Clash
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 11 Set 2004 11:14
Localização: Divinópolis (MG)

E REDE?!

Mensagem por Clash »

Amigo, achei bastante interessante sua rotina para bloquear, e como ela se comportaria em rede?

Me ajudaria bastante.

[ ]s
Clash
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Eu uso uma outra (um pouco parecida) que a cada vez que vc invoca a FUNÇÃO ele protege ou desprotege o arquivo

Código: Selecionar todos

PROT('arq1.dbf')
PROT('arq2.dbf')
  .
  .
  .
PROT('arqx.dbf')

FUNCTION PROT
PARAMETERS FILE
PRIVATE READ_BYTES, WRITE_BYTES, HANDLE, BUFFER
HANDLE = FOPEN(FILE,2)
IF HANDLE = -1
   RETURN(.F.)
ENDIF
BUFFER = SPACE(01)
READ_BYTES=FREAD(HANDLE,@BUFFER,1)
IF READ_BYTES !=1
   RETURN(.F.)
ENDIF
BUFFER=IIF(ASC(BUFFER)=3,CHR(4),IIF(ASC(BUFFER)=4,CHR(3),BUFFER))
BUFFER=IIF(ASC(BUFFER)=131,CHR(132),IIF(ASC(BUFFER)=131,CHR(132),BUFFER))
FSEEK(HANDLE,0,0)
WRITE_BYTES = FWRITE(HANDLE,BUFFER,1)
IF WRITE_BYTES !=1
   RETURN(.F.)
ENDIF
FCLOSE(HANDLE)
RETURN(.T.)
Para usá-la em rede eu crio um arquivo de controle dos usuários logados e somente bloquei os arquivos depois que o último usuário sai do sistema além é claro de um controle para os casos de o sistema ser finalizado de forma errada... (falta de luz etc...)

Detalhe... essa função não permite que o arquivo seja aberto nem no FoxBase, DBU ou Excel...
Espero que ajude...
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Eu uso a rdd Six para proteger meus dbfs...
tem uma função chama sx_dbfencrypt() e sx_setpass()..
primeiro eu criptografo o dbf assim...

// criptografando...
use dudu via "SIXNSX"
// senha para abrir o banco a criptografia eh gerada a partir da senha...
sx_setpass("dudu_xbase")
sx_dbfencrypt()


// para abrir o banco depois ....
use dudu via "SIXNSX"
sx_setpass("dudu_base")

Faço isso nos bancos q contém informações de Faturamento (receber) e Pagamento (pagar), e claro no de senhas de usuários tb.


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Avatar do usuário
Clash
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 11 Set 2004 11:14
Localização: Divinópolis (MG)

Mas e a REDE?

Mensagem por Clash »

E aí pessoal?!

DuDu, achei interessante a forma que vc utilizou com o RDD SIX, com a RDD CDX será que tem?! E novamente pergunto, num sistema em rede com 4 usuários master, funcionaria beleza?!

[ ]s
Clash
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinho

A dica do Dudu é realmente mais sensata, pois ela criptografa os dados e não o .DBF inteiro, sendo que desta forma mesmo aberto o arquivo continua com seus dados protegidos mesmo que o arquivo seja aberto em outro terminal.

Já use uma técnica identica a do nosso amigo Augusto, mas o problema reside no fato de que o primeiro usuario a abrir o arquivo, sem perceber, deixa o arquivo aberto para outros usuario, que podem acessar os dados até pelo dBase.

O unico problema é a senha que voce irá estipular, pois se esquece-la, ai...

bau, bau.

@braços :?)
Responder