Página 1 de 1
PROTEGER DBF
Enviado: 11 Set 2004 07:41
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
Proteger DBF's...
Enviado: 11 Set 2004 10:56
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
E REDE?!
Enviado: 16 Set 2004 20:55
por Clash
Amigo, achei bastante interessante sua rotina para bloquear, e como ela se comportaria em rede?
Me ajudaria bastante.
[ ]s
Clash
Enviado: 16 Set 2004 21:19
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...
Enviado: 16 Set 2004 22:00
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.
Mas e a REDE?
Enviado: 17 Set 2004 09:53
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
Enviado: 17 Set 2004 11:16
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 :?)