... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Segurança e produtividade com o código PROTEC

O Access é um dos melhores softwares que há no mercado, em termos de produtividade,  para criar aplicações de Banco de Dados desktop.   O poderoso mecanismo de montagem de relatórios, o uso de tabelas vinculadas e a programação baseada em eventos (VBA), reduzem pela metade, o tempo de desenvolvimento, comparado a outros softwares.

Segurança: o calcanhar de Aquiles

Quando o assunto é segurança, principalmente da Base de Dados, o Access recebe duras críticas e com toda razão!  Isto até melhorou bastante, nas versões do Access 2007 e 2010, com o uso de senha criptografada para abertura do aplicativo.  

Porém, de que adianta fecharmos a porta da frente, se deixamos a porta dos fundos aberta?  É o que a Microsoft vem fazendo: deixa a porta dos fundos escancarada para qualquer pessoa que entenda um pouco de Access, entrar e se apoderar da senha da Base de Dados, sem cerimônias! 

Quer saber como se obtém a senha?   O processo mais utilizado de acesso à Base de Dados é através do mecanismo de vinculação das tabelas.  Ao gerarmos os vínculos, o sistema interno do Access nos faz a gentileza de armazenar a senha da Base de Dados em uma tabela do sistema, chamada de MsysObjects, permitindo o fácil acesso pelo Painel de Navegação e até por aplicativos externos.   

Veja na imagem abaixo, a tabela listada pelo Painel de Navegação:

Painel de Controle

 

Ao abrirmos a tabela, nos deparamos com a senha exposta. 

Tabela MsysObjects

 

A Microsoft, versão após versão, não muda esta situação e a gente é quem tem que se virar para resolver!

Há algum tempo que venho oferecendo aqui pelo site, o OPEN, que fecha a porta dos fundos e mete trancas nas janelas, conseguindo desta forma, afastar a maioria dos possíveis invasores.  Contudo, ainda existe uma entrada secreta que o OPEN não consegue bloquear.  Para bloquear esta entrada secreta é preciso usar o código PROTEC que apresento abaixo.

Usando tabelas não vinculadas

Muitos dos programadores têm conhecimento sobre esta falha bizarra na proteção e por isso preferem trabalhar com tabelas não vinculadas, evitando assim, que a senha da Base de Dados fique exposta.   Porém, pagam um preço alto, em termos de produtividade, pois precisam utilizar o dobro de códigos para executarem o mesmo serviço que o Access realiza automaticamente, quando as tabelas estão vinculadas. 

Outra questão importantíssima é que os relatórios foram construídos para se trabalhar com tabelas vinculadas e quando isso não acontece, a montagem destes relatórios torna-se um tormento, pois além de exigir muita programação, os resultados nem sempre são satisfatórios.   Para não se perder a qualidade e a produtividade nos relatórios, muitos programadores recorrem ao uso de vínculos, via código, conforme você pode observar abaixo:

Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = "Select * From tblClientes in ''[;Database=" & CurrentProject.Path & _
"\Dados.accdb;PWD=senha]";"
End Sub

Repare que a senha precisa ser informada no código e muitos programadores não fazem idéia de que é muito fácil capturar esta senha, quando o relatório está sendo exibido, ainda que o código esteja protegido pela extensão ACCDE.

O código PROTEC

Depois de estudar a fundo a questão segurança e realizar vários testes, consegui montar o código PROTEC,  que é capaz de gerenciar a senha dos vínculos, sem que esta seja exposta na tabela MsysObjects.

Resolvi implementar esta segurança no aplicativo exemplo Maestro que ofereço aqui no site.  Baixe o aplicativo, clicando aqui.

Para entrar na estrutura do Maestro, basta manter pressionada a tecla SHIFT na inicialização.

Passo 1:  No formulário de login frmLogin foi inserida uma caixa ListBox.  Esta caixa ListBox, que fica oculta, é conectada ao recordset da tabela tblUsuários. 

Veja na imagem, a caixa ListBox no formulário frmLogin:

Código protec

 

Enquanto a conexão com a caixa ListBox estiver ativa, é possível acessar qualquer tabela vinculada, mesmo que seja indicada a senha incorreta nos vínculos.

Veja o código utilizado para conectar o recordset à caixa listBox:

Option Compare Database
Option Explicit
Private bdlista As DAO.Database
Private rslista As DAO.Recordset
Private tbl As DAO.TableDef
 
-----------------------------------------------------------------------------
 
Private Sub Form_Open(Cancel As Integer)
'---------------------------------------------------------------------------
'Código Protec que mantém a conexão com o back-end aberta
'Enquanto esta conexão estiver aberta, o acesso às tabelas garantido
'---------------------------------------------------------------------------
 
Set tbl = CurrentDb.CreateTableDef("tblUsandoAccess")
'------------------------------------------------
'Abre o back-end, informando a senha de acesso  
'------------------------------------------------
Set bdlista = OpenDatabase(DLookup("path_0", "tblCaminhoBe"), False, False, _
    ";PWD=" & fncCrip(DLookup("senha", "tblCaminhoBe"), 102030))
Set rslista = bdlista.OpenRecordset("tblusuários", 4)
'--------------------------------------------------------
'Carrega a listbox com o recordset da tabela tblUsuários
'--------------------------------------------------------
Set Me!Lista.Recordset = rslista 
End Sub
 
----------------------------------------------------------------------------
Private Sub Form_Close()
On Error Resume Next
If nlogoff = False Then Exit Sub
rslista.Close 'Encerra conexão com o recordset
Set rslista = Nothing
Set bdlista = Nothing
If Not booNovoVinculo Then DoCmd.Quit
End Sub

Passo 2:  Com a conexão ao back-end estabelecida, através do código acima, se faz necessário agora, vincular as tabelas com uma senha falsa, para que a senha verdadeira não seja exibida na tabela de sistema MsysObjects. 

Para tornar este processo automatizado, foi implementado a técnica de se gerar uma senha falsa para os vínculos, no sistema de vinculação do Maestro. 

Veja partes do código de vinculação utilizado pelo  Maestro, que se encontra no evento "No Timer" do formulário frmBarraProgresso:

Private Sub Form_Timer()
...
...
'---------------------------
'Definindo uma senha falsa
'--------------------------
Sf = 101010
...
...
'-------------------------------------------------------------------
'Abre o back-end em modo EXCLUSIVO para ser possível a troca da senha
'-------------------------------------------------------------------
Set BE = OpenDatabase(cBe, True, False, ";PWD=" & _
fncCrip(DLookup("senha", "tblCaminhoBe"), 102030))
...
...
'-------------------------------------------------------------------------
'Altera a senha do back-end para uma senha falsa.
'Quem vai gerenciar a senha verdadeira das tabelas é o código PROTEC 
'Os vínculos serão gerados pelo código, com esta senha falsa
'--------------------------------------------------------------------------
If InStr(Conn, ";PWD=") > 0 Then
   BE.NewPassword fncCrip(DLookup("senha", "tblCaminhoBe"), 102030), Sf
End If
...
...
'--------------------------------------------------------------
'Retornar com a senha original
'--------------------------------------------------------------
If InStr(Conn, ";PWD=") > 0 Then
  BE.NewPassword Sf, fncCrip(DLookup("senha", "tblCaminhoBe"), 102030)
End If
...
...
End sub

Observe que é necessário abrir o back-end no modo EXCLUSIVO para ser possível a troca da senha.   Isso implica que só será possível vincular as tabelas se o back-end não estiver em uso.

PRODUTIVIDADE

Usar o OPEN em conjunto com o código PROTEC é uma das melhores técnicas de defesa do mercado, porque você não terá que perder tempo em programar a parte de segurança, otimizando assim o seu tempo para o que interessa, que é o de atender as necessidades reais de seu cliente. 

Clique aqui para conhecer o OPEN.

Sucesso!


 

 


22 comentários

Welson Zeferino de Oliveira Junior   17/06/2012 10:18:42

Avelino, como já de costume meus parabéns... você é fantástico. Quero comprar o Protec e a Vídeo aula Técnicas de Invasão. Favor passar os dados do banco itau.

Tenho uma dúvida, o Protec será validado por aplicações? Exemplo: se tenho dez aplicativos terei que comprar 10 chaves do Protec, uma para cada projeto?

e-mail: wzoj@dicadecuros.com

Welson Zeferino de Oliveira Junior   17/06/2012 10:24:39

Para visualizar as vídeo aulas sem ter que baixar, basta acessar o link abaixo:

http://dicadecursos.com/dicas/2012/06/protec-o-mais-novo-lancamento-do-site-usando-access-em-breve/

Avelino Sampaio   17/06/2012 11:12:16

Welson,

isso mesmo! Uma licença para cada aplicativo.

Vale lembrar que para uso em rede você compra apenas uma licença.

Grato!

Edson C Almeida   18/06/2012 06:35:12

Oi Aveino. Parabéns mais uma vez. Você sabe das necessidades do programador Access e vai de encontro a elas. Você é campeão. Nota 1000.

Glicério Júnior (Jungli)   18/06/2012 07:43:31

Mais uma vez parabéns grande mestre pela valiosa ferramenta!

Luciano Diego Serezani   18/06/2012 16:38:35

Não estou conseguindo usar o arquivo *.aux. Acredito que ele esta com problema.
Quando vou vincular ele a minha base pelo formulário que você pediu, ele fehca a base.

Avelino Sampaio   18/06/2012 18:23:32

Luciano,

informe as versões do Windows e do Office. Informe também se está usando versões de 32 ou 64 bits.

Entre em contato pelo email:

avelino(arroba)usandoaccess(ponto)com(ponto)br

No aguardo

MARCIO MELO - RJ   18/06/2012 22:04:27

Rapaz, gostei muito dessa sua idéia, é como o seu artigo de vinculo automático com mais o reforço da senha oculta/criptografada nas tabelas nem imagino o q tenha feito mais sei q faz tudo com mt capricho, como vc comentou nesse artigo sobre desempenho consegui obter bons resultados fazendo o seguinte ter 1) ter as tabelas locais de consultas e 2) abrir um form de manutenção q tem uma tabela vinculada, percebi q isso faz maior diferença e se percebe nitidamente qdo as Ribbons se carregam na primeira vez, vai rápidas e suaves e sem o form fica carregando por alguns segundos. Nesse form tem um refresh de 5 minutos e verifica a rede se o banco deve ser fechado ou atualizado.

Sou mais Brasil!

Jose Carlos Valerio   04/07/2012 13:26:01

Estou tentando colocar segurança no meu banco de dados e sua informações me parecem muito boa. com fazer para ter o material completo.?

Jose Carlos

Jose Carlos   04/07/2012 13:28:42

Suas informaçõe parecem muito boas. Ainda não começei a trabalhar nela. Tenho um BD que venho formando a alguns anos, mas ainda não coloque niveis de usuarios. Vou usar o seu material para aprender com programar os niveis.
Muito obrigado.

Mauro Siena   21/07/2012 19:41:53

Ola Avelino, gostaria que vc me ajudasse, pois quando tento acessar o setup do open a partir do atalho, me vem uma mensagem dizendo que nao esta encontrando o caminho. Onde estou errando? Obrigado.

Avelino Sampaio   23/07/2012 07:54:01

Mauro,

o OPEN tem que estar na mesma pasta do seu aplicativo.
Se o caminho tiver espaço nos nomes, use as aspas. Exemplo:

"c:\sua pasta\seu bd.accdr" /x setup

Sucesso!

Sebastian   14/08/2012 16:42:55

Gostaria de saber porque a Microsoft eliminou o "MouseWheel" no Office 2007, por isso prefiro, programar no Office anterior, e pergunto se alguém sabe ou se existe algum aplicativo que volte a funcionar no Office 2007, ou se no 2010 funciona, se alguém sabe!

Avelino Sampaio   14/08/2012 17:42:04

Sebastian,

veja uma solução no link abaixo: (copie e cole o link no seu navegador)

http://support.microsoft.com/kb/2458709

Sucesso!

abraao Reis   05/09/2012 17:47:02

olá avelino esse modulo pode ser utilizado caso eu tenha um web Access

joão   28/09/2012 20:26:58

Gostei muito! Esse cara e fera!

Rafael Moreira   05/12/2012 17:21:23

Como faço para bloquear banco de dados no access 2010

JPaulo   06/12/2012 12:35:51

Excelente, parabens.
Abraço

Igor de Lima   12/12/2012 09:37:51

Bom dia Avelino,

Em primeiro lugar, parabéns pela técnica, muito boa mesmo. Agora me veio uma questão, no meu caso, as tbls de BE são acessadas via conexão ODBC, como posso passar os parâmetros de conexão delas na tbl tblCaminhoBe?

Atenciosamente,

Bom   23/02/2013 10:22:25

Este blogue é muito bom!

Geraldo Binhoto   22/04/2014 14:28:06

Caro Avelino.

Cada cliente tem que adquirir o Open e o Protec ou apenas o desenvolvedor, no caso eu.

Por favor me informe o valor atualizado de ambos e a forma de pagamento.

Muito grato.

gbsysti@gmail.com

Tel. 19 - 3455.3542 e Cel. 19 - 98198.1233


sushi   01/09/2016 09:46:32

muito bom gostei


Envie seu comentário: