Artigo: 209871 - Última revisão: quinta-feira, 23 de Junho de 2005 - Revisão: 3.0

ACC2000: Como criar uma palavra-passe protegida, formulário ou relatório

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Avançado: Requer conhecimentos avançados sobre codificação, interoperabilidade e multi-utilizador.

Este artigo aplica-se apenas a uma base de dados do Microsoft Access (.mdb).

Nesta página

Expandir tudo | Reduzir tudo

Sumário

O Microsoft Access tem duas funcionalidades de segurança incorporadas para proteger a base de dados:
  • Contas de utilizador/grupo e permissões
  • Palavras-passe de base de dados
Este artigo mostra como pode também definir palavras-passe individuais para cada formulário e para cada relatório na base de dados.

Mais Informação

A Microsoft fornece exemplos de programação apenas, para fins sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, as garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e as ferramentas que são utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador.
atenção : Se seguir os passos neste exemplo, modificará a base de dados de exemplo Adamastor.mdb. Convém cópia de segurança do ficheiro de base de dados Adamastor.mdb e siga estes passos numa cópia da base de dados.

Nota : O código de exemplo deste artigo utiliza Microsoft Data Access Objects. Para que este código seja executado correctamente, tem de referenciar a biblioteca Microsoft DAO 3.6 Object Library. Para o fazer, clique em References no menu Ferramentas no Editor do Visual Basic e certifique-se de que está seleccionada a caixa de verificação Microsoft DAO 3.6 Object Library .

Utilizar a palavra-passe de código proteger um formulário

Utilizando o código, pode pedir uma palavra-passe quando um utilizador abre um formulário ou relatório. Se for introduzida a palavra-passe correcta, é aberto o formulário ou relatório.

O exemplo seguinte mostra como pode palavra-passe proteger o formulário Encomendas na base de dados exemplo Adamastor.mdb:
  1. Inicie o Access e abra a base de dados de exemplo Adamastor.mdb.
  2. Prima ALT+F11 para iniciar o Microsoft Visual Basic editor.
  3. No menu Inserir , clique em módulo .
  4. Na folha do módulo, escreva o seguinte procedimento:
    Public MyPassword
    Public Function KeyCode(Password As String) As Long
       ' This function will produce a unique key for the
       ' string that is passed in as the Password.
       Dim I As Integer
       Dim Hold As Long
    
       For I = 1 To Len(Password)
          Select Case (Asc(Left(Password, 1)) * I) Mod 4
          Case Is = 0
             Hold = Hold + (Asc(Mid(Password, I, 1)) * I)
          Case Is = 1
             Hold = Hold - (Asc(Mid(Password, I, 1)) * I)
          Case Is = 2
             Hold = Hold + (Asc(Mid(Password, I, 1)) * _
                (I - Asc(Mid(Password, I, 1))))
          Case Is = 3
             Hold = Hold - (Asc(Mid(Password, I, 1)) * _
                (I + Len(Password)))
       End Select
       Next I
       KeyCode = Hold
    End Function
    					
  5. Prima ALT+F11 para regressar ao Access.
  6. Na janela Base de dados, em objectos , clique em tabelas e, em seguida, clique em Novo .
  7. Na caixa de diálogo Nova tabela , faça duplo clique Vista de estrutura .
  8. Criar uma nova tabela da seguinte forma:
       Table: tblPassword
       ---------------------------
       Field Name: ObjectName
          Data Type: Text
          Field Size: 50
       Field Name: KeyCode
          Data Type: Text
          Field Size: 25
          Input Mask: Password
    
       Table Properties: tblPassword
       -----------------------------
          PrimaryKey: ObjectName
    					
  9. Abra a tabela tblPassword e, em seguida, introduza os seguintes dados:
         ObjectName: Orders
           KeyCode: 2818
    					
  10. Criar um novo formulário na vista de estrutura e guarde o formulário como frmPassword.
  11. Adicionar uma caixa de texto única frmPassword chamado Text0 e um botão de comando chamado CheckPassword.
  12. Defina a propriedade Máscara de introdução de Text0 para "PASSWORD" (menos as aspas).
  13. Adicione o seguinte código para o evento AoFazerClique do botão CheckPassword e, em seguida, guardar o formulário:
    If IsNull(Forms!frmPassword!Text0.Value) Then
                     MsgBox "You cannot enter a blank Password. Try again."
                     Me!Text0.SetFocus
                Else
                     MyPassword = Me!Text0.Value
                     DoCmd.Close acForm, "frmPassword"
                End If 
    					
  14. Abra o formulário Encomendas na vista de estrutura.
  15. Se a folha de propriedades não estiver visível, clique em Propriedades no menu Ver .
  16. Escreva o seguinte procedimento de evento no módulo para a propriedade AoAbrir do formulário:
    Private Sub Form_Open(Cancel as Integer)
       Dim Hold As Variant
       Dim tmpKey As Long
       Dim I As Integer
       Dim rs As DAO.Recordset
       Dim db As DAO.Database
    
       On Error GoTo Error_Handler
       ' Prompt the user for the Password.
       DoCmd.OpenForm "frmPassword", acNormal, , , , acDialog
                Hold = MyPassword
    ' Open the table that contains the password.
       Set db = CurrentDb
       Set rs = db.OpenRecordset("tblPassword", dbOpenTable)
       rs.Index = "PrimaryKey"
       rs.Seek "=", Me.Name
       If rs.NoMatch Then
          MsgBox "Sorry cannot find password information. Try Again"
          Cancel = -1
       Else
          ' Test to see if the key generated matches the key in
          ' the table; if there is not a match, stop the form
          ' from opening.
          If Not (rs![keycode] = KeyCode(Cstr(Hold))) Then
             MsgBox "Sorry you entered the wrong password." & _
                "Try again.", vbOKOnly, "Incorrect Password"
             Cancel = -1
          End If
       End If
       rs.Close
       db.Close
       Exit Sub
    
    Error_Handler:
       MsgBox Err.Description, vbOKOnly, "Error #" & Err.Number
       Exit Sub
    End Sub
    					
  17. Feche e, em seguida, guarde o formulário Encomendas.
  18. Abra o formulário Encomendas e escreva palavra-passe quando lhe for pedido para uma palavra-passe.

    Repare que encomendas formam é aberto. KeyCode gerado pela palavra-passe corresponde KeyCode na tabela tblPassword e depende de caso das letras da palavra-passe introduzida.
  19. Feche e volte a abrir o formulário Encomendas e, em seguida, escreva palavra-passe quando lhe for pedido para uma palavra-passe.

    Repare que receberá a mensagem:
    Desculpa introduziu a palavra-passe errada. Tente novamente.
    Não é aberto o formulário Encomendas uma vez que o procedimento de palavra-passe é sensível a maiúsculas e minúsculas.
  20. Para determinar o que KeyCode correspondente é uma cadeia específica, escreva o seguinte na janela Immediate e prima ENTER:
    ?KeyCode("TestString")
    						
    o exemplo anterior devolve 5864.
  21. Para ocultar a tabela tblPassword na janela Base de dados, clique com o botão direito do rato na tabela tblPassword e, em seguida, clique em Propriedades . Na janela Propriedades, clique para seleccionar a caixa de verificação oculto e, em seguida, clique em OK .

A informação contida neste artigo aplica-se a:
  • Microsoft Access 2000 Standard Edition
Palavras-chave: 
kbmt kbhowto KB209871 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 209871  (http://support.microsoft.com/kb/209871/en-us/ )