TESTAR SEGURANCA DO ACCESS
Eu joguei a toalha.
Isso é coisa de louco mesmo, só quem tem parafusos a menos ou a mais sei lá, consegue conversar bit a bit com o computador.
Weber só fiquei mesmo preocupado com o fato do MDW e MDB ter que ficar no mesmo path criado ao se gerar os grupos de usuários, pois isso pode impedir o funcionamento das aplicações distribuidas.
Mando o Instalador (inno setup) para o cliente que deverá escolher uma pasta no servidor para colocar o MDB (copiar e colar), depois meu aplicativo VB abre uma tela pedindo para o usuário localizar a base de dados que será gravado o path no registro do windows para novos acessos, isso em cada terminal.
Com o fato do path estar gravado dentro do MDW ou MDB, não entendi direito, ao se colocar os arquivos do DB em outro path o programa não funciona.
Como resolver isso?
Isso é coisa de louco mesmo, só quem tem parafusos a menos ou a mais sei lá, consegue conversar bit a bit com o computador.
Weber só fiquei mesmo preocupado com o fato do MDW e MDB ter que ficar no mesmo path criado ao se gerar os grupos de usuários, pois isso pode impedir o funcionamento das aplicações distribuidas.
Mando o Instalador (inno setup) para o cliente que deverá escolher uma pasta no servidor para colocar o MDB (copiar e colar), depois meu aplicativo VB abre uma tela pedindo para o usuário localizar a base de dados que será gravado o path no registro do windows para novos acessos, isso em cada terminal.
Com o fato do path estar gravado dentro do MDW ou MDB, não entendi direito, ao se colocar os arquivos do DB em outro path o programa não funciona.
Como resolver isso?
interessante... tenho um programa que acessa via rede (mapeada) um programa no nosso servidor. este programa tem acesso via ado, e utiliza activ reports com várias dll/ocx de exportação... mas não instalei nos terminais, apenas no servidor. nos usuários apenas coloquei um atalho para o exe que está no servidor... desta forma não seria necessário copiar os arquivos de banco de dados, uma vez que o próprio instalador colocaria onde deve estar.
Estava tentando fazer através do próprio ACCESS, fiz um macro com um Modulo:
Sub AbreDBProtegido(ByVal strMDWPath As String, _
ByVal strUser As String, ByVal strPwd As String, _
ByVal strMDBPath As String)
On Error GoTo Trata_Err
' Escrito por Joao Rodrigues (JR)
' http://www.accessjr.cjb.net - JUN/2002.
' strMDWPath - caminho do arquivo MDW.
' strUser - nome do usuário.
' strPwd - senha do usuário.
' strMDBPath - caminho do arquivo MDB/MDE.
Dim cnn As New ADODB.Connection, strCnn As String
' Define a string de conexão.
strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Password=" & strPwd & ";User ID=" & strUser _
& ";Data Source=" & strMDBPath & ";Mode=" &adModeReadWrite &";" _
& "Jet OLEDB:System database=" & strMDWPath
cnn.ConnectionString = strCnn
cnn.Open ' UserID e Password poderiam ser passados
' aqui também.
Sai:
If cnn.State = adStateOpen Then
' Aqui você colocaria o código desejado.
' No caso, estou apenas confirmando que
' o banco foi aberto com sucesso.
MsgBox "O arquivo " & strMDBPath _
& " foi aberto com sucesso.", vbInformation, _
"AbreDBProtegido"
cnn.Close ' Libera recursos.
End If
Set cnn = Nothing ' Libera recursos.
Exit Sub
Trata_Err:
MsgBox Err.Description, vbCritical, Err.Source
Resume Sai
End Sub[/c]
E na tela do ACCESS em Verificação imediata (CTRL+G) tentei:
Começa tudo beleza ele começa a ler e depois dá erro... VÃ esse artigo no Link: http://www26.brinkster.com/accessjr/default.asp?http%3A//www26.brinkster.com/accessjr/detalhe.asp%3FPergunta_Id%3D232
Estava com esperanças que o código fosse dar certo, mas nada.....
[c]Sub OpenDBWithNewWorkgroupFile(strPathToFile As String, _
strDefaultUser As String, _
strDefaultPwd As String, _
strPathToDatabase As String)
' This function uses the unsupported PrivDBEngine object to
' open a database using a different workgroup information file
' than the one being used as the default. You might do this if
' you want to access data that is in a secured database that uses
' a different workgroup information file.
Dim dbe As PrivDBEngine
Dim wrk As Workspace
Dim dbs As Database
' Return a reference to a new instance of the PrivDBEngine object.
Set dbe = New PrivDBEngine
' Set the SystemDB property to specify the workgroup file.
dbe.SystemDB = strPathToFile
dbe.DefaultUser = strDefaultUser
dbe.DefaultPassword = strDefaultPwd
Set wrk = dbe.Workspaces(0)
' Open the secured database.
Set dbs = wrk.OpenDatabase(strPathToDatabase)
End Sub
Sub AbreDBProtegido(ByVal strMDWPath As String, _
ByVal strUser As String, ByVal strPwd As String, _
ByVal strMDBPath As String)
On Error GoTo Trata_Err
' Escrito por Joao Rodrigues (JR)
' http://www.accessjr.cjb.net - JUN/2002.
' strMDWPath - caminho do arquivo MDW.
' strUser - nome do usuário.
' strPwd - senha do usuário.
' strMDBPath - caminho do arquivo MDB/MDE.
Dim cnn As New ADODB.Connection, strCnn As String
' Define a string de conexão.
strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Password=" & strPwd & ";User ID=" & strUser _
& ";Data Source=" & strMDBPath & ";Mode=" &adModeReadWrite &";" _
& "Jet OLEDB:System database=" & strMDWPath
cnn.ConnectionString = strCnn
cnn.Open ' UserID e Password poderiam ser passados
' aqui também.
Sai:
If cnn.State = adStateOpen Then
' Aqui você colocaria o código desejado.
' No caso, estou apenas confirmando que
' o banco foi aberto com sucesso.
MsgBox "O arquivo " & strMDBPath _
& " foi aberto com sucesso.", vbInformation, _
"AbreDBProtegido"
cnn.Close ' Libera recursos.
End If
Set cnn = Nothing ' Libera recursos.
Exit Sub
Trata_Err:
MsgBox Err.Description, vbCritical, Err.Source
Resume Sai
End Sub[/c]
E na tela do ACCESS em Verificação imediata (CTRL+G) tentei:
AbreDBProtegido "C:\Arquivos de programas\Microsoft Office\Office\System.mdw","Administrador","gabriel","C:\acessoseguro.mdb"
Começa tudo beleza ele começa a ler e depois dá erro... VÃ esse artigo no Link: http://www26.brinkster.com/accessjr/default.asp?http%3A//www26.brinkster.com/accessjr/detalhe.asp%3FPergunta_Id%3D232
Estava com esperanças que o código fosse dar certo, mas nada.....
ééé GABRIEL...
o buraco é mais embaixo - eh eh eh
o pior é que o que o weber fez é ridiculamente simples... e extremamente funcional... naun consegui tbm acessar o banco
o buraco é mais embaixo - eh eh eh
o pior é que o que o weber fez é ridiculamente simples... e extremamente funcional... naun consegui tbm acessar o banco
Weber acho que você terá de explicar a galera como fez e como contornar o problema do path na criação do MDW. Agora talvez se publicar na Web em sites de Hacker para ver se alguém consegue quebrar, talvez aparece algum NERD com uma solução.
Jean você disse que tem um programa instalado no servidor que é acessado pelo terminal sem que as DLL e OCK, runtimer etc... estejam instalados nos terminais?
1) Como isso é possÃvel?
2) O que são DLL e OCX de exportação, como citou?
3) Quando disse que não dava para escolher o path na instalação do MDB, isso porque cada cliente (empresa) tem estrutura nos servidores diferentes, assim pode ser que em um o MDB fique no path:
(W:\Sistemas\Usuarios\Meu programa\arquivo.mdb
mas em outro fique em:
(C:\Arquivos de Programas\Fornecedores\Meu sistema\arquivo.mdb
Se o path está definido dentro do MDW, então isso nunca poderia funcionar pois foi definido em minha máquina e não no cliente.
Será que tem solução?
Jean você disse que tem um programa instalado no servidor que é acessado pelo terminal sem que as DLL e OCK, runtimer etc... estejam instalados nos terminais?
1) Como isso é possÃvel?
2) O que são DLL e OCX de exportação, como citou?
3) Quando disse que não dava para escolher o path na instalação do MDB, isso porque cada cliente (empresa) tem estrutura nos servidores diferentes, assim pode ser que em um o MDB fique no path:
(W:\Sistemas\Usuarios\Meu programa\arquivo.mdb
mas em outro fique em:
(C:\Arquivos de Programas\Fornecedores\Meu sistema\arquivo.mdb
Se o path está definido dentro do MDW, então isso nunca poderia funcionar pois foi definido em minha máquina e não no cliente.
Será que tem solução?
1) bem... o caso é que meus programas usam apenas o mdac... por isso ele rodou legal...
2) me passei nesta... a máquina tinha o active reports instalado
3) assumindo que será instalado no servidor junto com o exe
2) me passei nesta... a máquina tinha o active reports instalado
3) assumindo que será instalado no servidor junto com o exe
Eu gostaria de receber o arquivo...
Valeu.
Até mais...
Valeu.
Até mais...
para exeplicar a todos o jean ja ta mais por dentro do assunto pois estamos hoje trocando ideias via msn, mas é o seguinte
como o gabriel falou tem como vc ir ate a metade do processo tudo graças ao id ser diferente do nome do usuario se fossem iguais talvez daria certo
qnto a localização vc q ira definir a licalização do arquivo mdw nao precisa ficar no mesmo local do mdb, e vc pode utilizar ate o tipo "path &" e gostaria de lembrar ais amigos q na realidade esse exe q eu mandei é so um teste BETA so para vc's verem q funciona, tanto é q nem fiz tratamento de erro so para testar mesmo so para vcÂÂÂ's terem ideia eu estou com esse sistema de segurança em um cliente meu uma institurição bancaria q em dois departamentos eu usei um metodo diferente
no primeiro o banco e o arquivo mdw estao no servidor e o executavel vai la buscar os dados
no segundo o banco esta no servidor e em cada maquina na pasta do windows/system esta localizado o arquivo mdw.
pessoal é so testes não iria perder tempo se fosse algo tão ENGESSADO certo...
ALGUEM MAIS SE HABILITA ou POSSO ENCERRAR O TÓ“PICO ???
como o gabriel falou tem como vc ir ate a metade do processo tudo graças ao id ser diferente do nome do usuario se fossem iguais talvez daria certo
qnto a localização vc q ira definir a licalização do arquivo mdw nao precisa ficar no mesmo local do mdb, e vc pode utilizar ate o tipo "path &" e gostaria de lembrar ais amigos q na realidade esse exe q eu mandei é so um teste BETA so para vc's verem q funciona, tanto é q nem fiz tratamento de erro so para testar mesmo so para vcÂÂÂ's terem ideia eu estou com esse sistema de segurança em um cliente meu uma institurição bancaria q em dois departamentos eu usei um metodo diferente
no primeiro o banco e o arquivo mdw estao no servidor e o executavel vai la buscar os dados
no segundo o banco esta no servidor e em cada maquina na pasta do windows/system esta localizado o arquivo mdw.
pessoal é so testes não iria perder tempo se fosse algo tão ENGESSADO certo...
ALGUEM MAIS SE HABILITA ou POSSO ENCERRAR O TÓ“PICO ???
Weber e pessoal.
A algum tempo atrás eu recebi um e-mail de uma lista sobre segurança no MDB, porém nunca tentei implementar já que meus aplicativos são multiusuários e não mono, assim não encontrei uma solução para evitar um problema lógico.
O assunto é a seguinte, para compartilhar com vocês.
A dica era na hora de acessar o MDB o VB, antes de fazer a conexção via ADO, DAO et..., abria o arquivo pelo OPEN em modo binário: Depois trocava o primeiro caracter do MDB de 0 para 1 e fechava o MDB para depois se conectar. Acho que era mais ou menos isso ou os valores invertidos de 1 para 0 e depois ao desconectar restaurava o caracter novamente.
Pelo texto que recebi, esse procedimento impedia que o Access abrisse o arquivo já que essa troca tornava o padrão binário diferente do reconhecido por ele.
Até aqui parece maravilhoso, porém "Cá com meus botões", pensei algo que o texto não abordou.
1) Sendo multiusuário pode ser que um usuário abra o banco enquanto outro já o tenha aberto e isso poderia bagunçar a gravação binária do MDB, deixando o sistema inoperante.
2) Não sei as consequencias disso caso ocorra uma queda de energia ou a estação trave com o MDB aberto em modo binário sem ser fechado.
3) Não sei se podem ocorrer outros problemas com essa dica.
Comentários....
A algum tempo atrás eu recebi um e-mail de uma lista sobre segurança no MDB, porém nunca tentei implementar já que meus aplicativos são multiusuários e não mono, assim não encontrei uma solução para evitar um problema lógico.
O assunto é a seguinte, para compartilhar com vocês.
A dica era na hora de acessar o MDB o VB, antes de fazer a conexção via ADO, DAO et..., abria o arquivo pelo OPEN em modo binário: Depois trocava o primeiro caracter do MDB de 0 para 1 e fechava o MDB para depois se conectar. Acho que era mais ou menos isso ou os valores invertidos de 1 para 0 e depois ao desconectar restaurava o caracter novamente.
Pelo texto que recebi, esse procedimento impedia que o Access abrisse o arquivo já que essa troca tornava o padrão binário diferente do reconhecido por ele.
Até aqui parece maravilhoso, porém "Cá com meus botões", pensei algo que o texto não abordou.
1) Sendo multiusuário pode ser que um usuário abra o banco enquanto outro já o tenha aberto e isso poderia bagunçar a gravação binária do MDB, deixando o sistema inoperante.
2) Não sei as consequencias disso caso ocorra uma queda de energia ou a estação trave com o MDB aberto em modo binário sem ser fechado.
3) Não sei se podem ocorrer outros problemas com essa dica.
Comentários....
Caro amigo a sua colocação tem procedencia, ha alguma falha mas para deixar alguns esclarecimentos sobre isso tudo aqui imagine vc criar um sistema de registro pelo usuario ouseja id de usuario e senha de acesso e estes dados estarem gravados em um arquivo ini certo, os arquivos ini podem ser abertos pelo editor de texto, ai vc teria um arquivo de segurança no minimo inseguro e mesmo assim vc poderia abrir o access certo a minha ideia parte do principio de vc bloquear totalmente o arquivo access ou seja nao ter como abrir o arquivo access so atraves do vb, desta maneira o access disponibiliza um arquivo mdw, q se souber cria-lo nao tem como vc abrir o arquivo access vinculado a este arquivo, nao adianta criar outro (so se vc saber exatamente os tres parametros isso com diferenciação entre maiuscu.. e minusc...) nao adianta deletar, nao adianta criar outro arquivo e importar as tabelas ....
so vai funcionar o aquele arquivo...
tudo isso porque
primeiro para provar q o access não é assim tão "fraquinho" em nivel de segurança como alguns o consideram
segundo pq eu tava querendo uma maneira de nao ter como conhecer o conteudo do banco, desta maneira tem muitos amigos meus aqui do vbmania q usam o banco com dados para gerar senhas por exemplo de accesso, alugar etc... a intenção deste tópico é q alguem quebrasse a segurança deste nivel q utilizei, não para me rotular como bom ou etc... mas pq eu to usando este modelo de segurança a alguns meses em um cliente uma instituição bancaria, e la funciona mas aqui temos ótimos desenvolvedores e ai pensei quem mais poderia quebrar uma proteção de um software se não um outro desenvolvedor entao a minha intenção é q realmente alguem consiga quebrar caso contrario vou poder dizer q o sistema é SEGURO e ai defender mais ainda o ACCESS
so vai funcionar o aquele arquivo...
tudo isso porque
primeiro para provar q o access não é assim tão "fraquinho" em nivel de segurança como alguns o consideram
segundo pq eu tava querendo uma maneira de nao ter como conhecer o conteudo do banco, desta maneira tem muitos amigos meus aqui do vbmania q usam o banco com dados para gerar senhas por exemplo de accesso, alugar etc... a intenção deste tópico é q alguem quebrasse a segurança deste nivel q utilizei, não para me rotular como bom ou etc... mas pq eu to usando este modelo de segurança a alguns meses em um cliente uma instituição bancaria, e la funciona mas aqui temos ótimos desenvolvedores e ai pensei quem mais poderia quebrar uma proteção de um software se não um outro desenvolvedor entao a minha intenção é q realmente alguem consiga quebrar caso contrario vou poder dizer q o sistema é SEGURO e ai defender mais ainda o ACCESS
Tópico encerrado , respostas não são mais permitidas