Implementando a segurança

Conteúdo


Introdução

São tantos as referências e os textos abordando a segurança para a base de dados relacionais que certamente parecerei redundante ao tratar aqui deste assunto, tentarei então fazer uma abordagem mais prática com exemplos práticos.

Inicialmente não havia tanta preocupação com a segurança , era mais importante como os sistemas trabalhavam que sua interação com o ambiente e o usuário. Este panorama veio se alterando, e com o explosão da Internet e a quantidade de informação que esta disponível espalhada pelos servidores pelo mundo, hoje não pode mais ser negligenciada.

Naturalmente você deve pensar em proteger seus dados , seu código e suas informações quando realmente isto for necessário e haverá ocasiões em que isto não fará sentido, por isto o bom senso na análise de cada situação deve nortear em como você deve agir e em qual nível de segurança você deve implementar.

Inicialmente iremos falar dos níveis de segurança, se é que assim podem ser chamados, mais simples e que fornecem apenas uma maneira de controlar quem está acessando o sistema.

Antes de iniciar vamos deixar bem claro que estaremos tratando principalmente da base de dados padrão MS Access e usaremos para isto , quando possível a linguagem Visual Basic versão 5.0.

  1. Uma simples janela de Logon

A forma mais simples de segurança que você pode usar é uma janela de logon que peça o nome e senha para o usuário que queira acessar o seu sistema, pode parecer brincadeira mas para certos casos isto é o suficiente; na verdade você pode utilizá-la apenas como mais uma barreira , entre outras , de acesso ao sistema . Vemos abaixo a janela de logon do sistema , ela foi construida usando o Visual Basic 5.0.
Esta deverá ser a primeira janela de sua aplicação de forma que somente os usuários autorizados poderão acessar o sistema.

Nela temos os seguintes controles: 1 Form , 2 TextBox , 2 labels e 2 botões de comandos : command1(0) e command1(1).

O usuário irá fornecer o nome e a senha e a seguir deverá clicar no botão Entrar , o sistema irá então checar se o usuário e a senha informada tem permissão de acessar o sistema.

Vejamos a seguir o código associado ao botão Entrar.

Private Sub Command1_Click(Index As Integer)

Dim db As Database
Dim rs As Recordset

On erro GoTo trata_erro

Select Case Index
Case 0 'botao sair
Unload Me

Case 1 'botao entrar
If txtusuario.Text = "" Or txtsenha.Text = "" Then
MsgBox "Informe o Nome/Senha do usuário ! "
Exit Sub
End If

Call Codigo_Chave(txtsenha.Text)

Set db = DBEngine.Workspaces(0).OpenDatabase(App.Path & "\Secur.mdb")
Set rs = db.OpenRecordset("senhas", dbOpenTable)
rs.Index = "Primarykey"
rs.Seek "=", txtusuario.Text

If rs.NoMatch Then
MsgBox "Usuário não cadastrado !!!! ", , "Login"
Exit Sub
Else
If Not (rs![senha] = Codigo_Chave((txtsenha.Text))) Then
MsgBox " Senha Inválida !!! , tente novamente ", vbOKOnly, "Senha Incorreta"
txtsenha.SetFocus
txtsenha.SelStart = 0
txtsenha.SelLength = Len(txtsenha.Text)
Exit Sub
Else
MsgBox "Sucesso no Logon !!! ", , "Login"
Me.Hide
End If
End If

End Select
Exit Sub

trata_erro:
MsgBox Err.Description, vbOKOnly, " Erro # " & Err.Number
Exit Sub

End Sub
E a função que codifica a senha.  
Public Function Codigo_Chave(senha As String) As Long

Dim i As Integer
Dim ret As Long

For i = 1 To Len(senha)
Select Case (Asc(Left(senha, 1)) * i) Mod 4
Case 0
ret = ret + (Asc(Mid(senha, i, 1)) * i)
Case 1
ret = ret - (Asc(Mid(senha, i, 1)) * i)
Case 2
ret = ret + (Asc(Mid(senha, i, 1)) * i) * (i - Asc(Mid(senha, i, 1)))
Case 3
ret = Abs(ret - (Asc(Mid(senha, i, 1)) * i) * (i + Len(senha)))
End Select
Next i

Codigo_Chave = ret

End Function
 

Voce deve criar um tabela no seu banco de dados para guardar o nome do usuario e a senha, o nome deve ser uma chave primária e a senha um número do tipo inteiro longo.

A função Código_chave descodifica a senha e verifica se a mesma é válida ; se alguém tiver acesso ao seu banco de dados e abrir a tabela de senhas verá as senhas todas codificadas.

Embora simples , esta solução mostra que alguma coisa é possivel ser feita a nível de código para tentar proteger seus sistema . Mas não se engane, ela poderá ser facilmente burlada por um superusuário .

Conteúdo

Atribuindo uma senha a seu Banco de dados

O Microsoft Access atualmente oferece duas maneiras de você proteger o seu banco de dados: ( leia também : Esqueceu a senha do banco de dados ? )

  1. Você pode atribuir uma senha a sua base de dados . Dessa forma para acessar os dados de sua base sempre será pedida a senha atribuida. Esse método é simples e pode ser utilizado para um usuário ou um pequeno grupo de usuários. Para trabalhar com segurança em ambiente multiusuário os caminhos serão outros...
  2. Segurança a nível de usuário e o sistema de contas.Entraremos em detalhes sobre este método no transcorrer deste artigo.

Vamos ver então como atribuir uma senha a sua base de dados e é claro como fazer para abrir a base de dados e alterar esta senha.

Podemos fazer isto usando o Access . Neste caso é só abrir sua base de dados e selecionar as opções :

Ferramentas-> Segurança -> Definir senha do banco de dados (Ver na figura abaixo)

 
   
 

 

Podemos também fazer a atribuição via código no Visual Basic usando o método NewPassword do DAO.

O método NewPassword têm a seguinte sintaxe:

Objeto.NewPassword senha_antiga, senha_nova

Onde :

Senha_antiga é a senha que desejamos alterar . No nosso caso como estamos atribuindo uma senha nova ao banco de dados a senha inicial é a senha antiga e é definida como uma stringa vazia ("").

Senha_nova é a senha que atribuimos a nossa base de dados.

Vejamos um pequeno trecho de código que realiza a tarefa - Atribui e serve para alterar a senha de uma base de dados :

Formulário para atribuir senha a uma base de dados

Controles usados:

Duas caixas de texto - Text1.text e Text2.text

Dois botões de comandos - Command1(0) e command1(1)

Um frame . Muito simples.

 
Dim wks As workspace
Dim db As Database
Dim caminho As String
Dim password As String

Private Sub Command1_Click(Index As Integer) 'Botão OK - efetiva a alteraçao de senha do banco de dados
Select Case Index
Case 0
If Text1.Text <> Text2.Text Then
MsgBox "A senha nao confere !!! ", vbExclamation
Exit Sub
End If
If Text1.Text = "" Or Text2.Text = "" Then
MsgBox "Informe a senha !!! "
Exit Sub
End If
Set db = wks.OpenDatabase(caminho, True, False, ";PWD=" & password)
db.NewPassword password, Text1.Text 'atribui nova senha
password = Text1.Text
Set db = wks.OpenDatabase(caminho, False, False, ";PWD=" & password)
MsgBox "Senha Alterada com sucesso !!! "
Text1.Text = ""
Text2.Text = ""
Case 1
End
End Select
End Sub

Private Sub Form_Load()
caminho = "C:\Meus documentos\senha.mdb"
Set wks = CreateWorkspace("", "admin", "")
password = "" 'senha inicial é sempre uma string vazia ""
End Sub

Obs: Se for utilizar o Controle de dados para acessar uma base de dados com senha você precisa informa a seguinte linha de código:

Seu_Data_Control.Connect = ";pwd=senha"

Onde senha é a senha da base de dados.

Se for compactar uma base de dados com senha tenha o cuidado de informa a senha :

DBEngine.CompactDatabase "base_normal" , "base_compactada", dbLangGeneral, dbVersion30,";pwd=senha"

Conteúdo

Vou parando por aqui... :-)

 
Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti