Embora tenha escrito dois artigos abordando o assunto ( Implementando Segurança e Redes: Programas Multiusuários) fiquei somente na superfície devido a sua vastidão , complexidade e profundidade . Tentarei desta vez ser mais objetivo e abrangente(?) e tocar nas principais dúvidas que nos assolam quando vamos desenvolver um sistema multiusuário. (Não confundir com ambiente Cliente/Servidor).
Naturalmente irei abordar somente o acesso a base de dados Access ( por favor não me critiquem por isso) , pois de outra forma isto aqui iria se tornar um livro gigantesco. Além do mais creio que a maioria dos usuários ainda utiliza esta plataforma. Mesmo assim devido as diferentes versões do Jet Engine a tarefa é complexa e trabalhosa. Vou procurar focar o assunto nas versões 3.5 (Access 95/97) e 3.6 do Jet (Access 2000).
Lembre-se que em se tratando de base de dados Access a questão da segurança dos dados fica um pouco comprometida conforme a versão do Jet que se esta usando. Eu já abordei isto no artigo: Esqueceu a senha do banco de dados ??...
Vamos tratar o assunto na forma de perguntas e respostas , adicionando , quando pertinente , exemplos para dirimir as possíveis dúvidas. Então ao trabalho...
1- Como posso implementar a segurança em uma base de dados Access ?
Aqui devemos deixar bem claro uma coisa - O Visual Basic não é uma aplicação voltada para administrar base de dados , mas para acessar base de dados e implementar interfaces com o usuário. Para implementar a segurança temos que usar o Assistente de segurança a nível de usuário, essa forma de segurança é semelhante aos métodos utilizados na maioria dos sistemas de rede.
Na segurança em nível de usuário, ou sistema de contas , os usuários têm que se identificar através de uma chave e digitar uma senha quando iniciar o Microsoft Access. Essas informações estão dentro do arquivo de informação do grupo de trabalho (o arquivo padrão é chamado system.mdw) ali eles são identificados como membros de um grupo. O Microsoft Access fornece dois grupos padrão: administradores e usuários mas você pode definir grupos adicionais.
Após executar o Assistente de segurança em nível de usuário, você pode atribuir ou remover permissões para contas de usuários e de grupos em seu grupo de trabalho para um banco de dados e suas tabelas, formulários, relatórios e macros existentes.
São concedidas permissões a grupos e a usuários para regular o modo pelo qual eles poderão trabalhar com cada tabela, consulta, formulário, relatório e macro em um banco de dados. Por exemplo, os membros do grupo Usuários podem ter permissão para visualizar, inserir ou modificar dados em uma tabela Clientes, mas não para alterar a estrutura dessa tabela.
Embora o grupo Usuários possa ter permissão somente para visualizar dados em uma tabela que contenha dados de pedidos, pode não ter qualquer acesso a uma tabela Folha de Pagamento. Os membros do grupo Administradores têm permissões totais sobre todas as tabelas, consultas, formulários, relatórios e macros de um banco de dados. Você pode definir um controle mais minucioso criando suas próprias contas de grupo, atribuindo permissões apropriadas a esses grupos e, em seguida, adicionando usuários a esses grupos.
Se você precisa de controle mais rígido de diferentes grupos de usuários, pode criar seus próprios grupos, atribuir diferentes conjuntos de permissões para esses grupos e adicionar usuários aos grupos apropriados. Para simplificar o gerenciamento de permissões, é recomendado que você atribua permissões somente aos grupos (não aos usuários) e, em seguida, adicione os usuários aos grupos apropriados.
Após criar o grupo de informação você pode usar o Visual Basic para administrar completamente a segurança do MS-Jet, embora isto possa parecer uma tarefa hercúlea é perfeitamente possível.
De forma geral as operações envolvidas na proteção de um banco de dados MS-Jet são:
Obs: Voce pode remover a permissão Abrir/Executar do container database para o grupo Usuários manualmente ou através do Assistente de segurança. Com isto você evita que alguém abra o seu banco de dados usando outro arquivo de grupo de trabalho ou o arquivo padrão System.mdw.
2- Como criar um arquivo de informação do grupo de trabalho ?
O arquivo de informação do grupo de trabalho é um tipo de banco de dados que armazena informações sobre os usuários e grupos. Estas informações não ficam no banco de dados mas em um arquivo distinto geralmente chamado SYSTEM.MDW (você pode criá-lo com outro nome).
Para criar este arquivo você vai ter que usar o utilitário WRKGADM.EXE que não vem com o Visual Basic apenas com o Access . Para criar o arquivo de informação siga as etapas:
Ao criar um novo arquivo de informação do grupo de trabalho você irá torná-lo o arquivo de informação padrão o que poderá influenciar os banco de dados protegidos já existentes. Para alterar o arquivo de informação que estiver associado a seus banco de dados você deverá usar o mesmo utilitário e clicar no botão Associar... escolhendo o arquivo MDW desejado. Entendeu ???
3- Como atribuir o arquivo de informação do grupo de trabalho usando código ( DAO) ?
Após criar o seu arquivo de grupo de informação (.MDW) você deverá designá-lo em sua aplicação Visual Basic ao banco de dados usado pelo seu sistema , isto evitará que qualquer outro arquivo seja usado indevidamente. Para fazer isto atribua o nome do arquivo do grupo de trabalho a propriedade SystemDB do objeto DBEngine :
DBEngine.SystemDB = "C:\teste\clientes.mdw"
Lembre-se que o DBEngine é um objeto que sempre está disponível e portanto não necessita que criamos uma instância do mesmo. Esta operação deverá ser a primeira a ser executada pela sua aplicação pois assim que você cria um objeto DAO o objeto DBEngine é iniciado e se não atribuirmos um arquivo de grupo de trabalho ao DBEngine primeiro ele irá usar qualquer arquivo que esteja configurado no ambiente de execução.
4- Como atribuir uma senha a um banco de dados Access ?
Leia os artigos : Implementando a segurança e Esqueceu a senha do banco de dados.
5- Como exibir , criar e excluir usuários de um sistema de contas ?
Após ter criado o seu arquivo MDW você está apto a criar as contas do usuário. É a conta do usuário que o identifica exclusivamente permitindo que ele se conecte e use o banco de dados O Jet possibilita o acesso a lista de contas dos usuários através da coleção Users do objeto Workspace. Vejamos a seguir um exemplo de como exibir todas as contas dos usuário na coleção Users.
General Declarations
Private usuario As user Private Sub Command1_Click() Private Sub Form_Load() |
No exemplo acima estamos exibindo os usuários definidos no arquivo de grupo de trabalho SYSTEM.MDW localizado em C:\TESTE . Se nenhum usuário estiver cadastrado iremos obter o seguinte resultado:
Vemos aqui exibidas as contas criadas pelo Jet como padrão para suportar operações internas. |
Para criar um novo usuário usamos o método CreateUser do objeto User atribuindo o nome , a senha e o identificador exclusivo - PID - que é uma string de 4 até 20 caracteres que fornece exclusividade a uma conta do usuário. Através do PID e do nome do usuário podemos recrirar a conta do usuário caso nosso arquivo MDW venha se perder. Vejamos um exemplo usando código DAO de como criar uma nova conta de usuário:
Private Sub Command2_Click() Dim strNome As String Dim strPID As String Dim strSenha As String strNome = InputBox("Informe o nome do usuário.", "NOVO USUÁRIO") strSenha = InputBox("Informe a senha do usuário.", "NOVO USUÁRIO") strPID = InputBox("Informe o código de identificação Pessoal ( PID) .", "NOVO USUÁRIO") Set Usuário = Workspaces(0).CreateUser(strNome) Usuário.PID = strPID Usuário.Password = strSenha Workspaces(0).Users.Append Usuário ' Código
necessário para incluir o usuário a um grupo End Sub |
O código destacado em azul é necessário quando usamos a DAO pois quando criamos um usuário via código DAO os mesmos não são incluídos em nenhum grupo.
Para excluir uma conta de usuário usamos o método Delete do objeto Users. A seguir damos um exemplo:
Private Sub Command3_Click() Dim usuario As String usuario = InputBox("Informe o nome do usuário a excluir", "EXCLUI USUÁRIO") Workspaces(0).Users.Delete usuario 'exibe os usuários Command1_Click End Sub |
Obs: Não apague todas as contas do usuário Admins. Se você apagar não será mais capaz de gerenciar o seu banco de dados
6- Como Exibir , criar e excluir grupos ?
Para gerenciar um sistema de contas é muito mais prático criar grupos , atribuir aos grupos criados as permissões e a seguir incluir os usuários aos seus respectivos grupos. Para criar um grupo usamos o método CreateGroup com a seguinte sintaxe:
Set grupo = objeto.CreateGroup ( nome, pid )
Para acessar a lista de grupos que existe em um banco de dados usamos a coleção Groups do objeto Workspace. Vejamos como fazer isto no exemplo a seguir.
Option Explicit Private MeuGrupo as Group Private sub cmdGrupo_click() list1.clear For Each MeuGroupo in Workspaces(0).Groups List1.additem MeuGrupo.Name Next End Sub |
Para criar um novo grupo criamos um objeto Group usando o método CreateGroup do objeto Workspace e a seguir anexe-o á coleção Groups. O código abaixo mostra como fazer isto:
Private Sub cmdcriagrupo_Click() Dim Nome As String Nome = InputBox("Informe o nome do novo Grupo", "NOVO GRUPO") Set MeuGrupo = Workspaces(0).CreateGroup(Nome) MeuGrupo.Pid = InputBox("Informe um número de identificacao (PID) para o Grupo : ", "NOVO GRUPO") Workspaces(0).Groups.Append MeuGrupo If Err.Number = 0 Then MsgBox "O grupo => " & UCase(MeuGrupo.Name) & " foi criado com sucesso " Else MsgBox "Ocorreu o erro => " & Err.Description End If End Sub |
Finalmente para excluir um grupo , basta apagá-lo da coleção Groups usando o método Delete . Vejamos a seguir um exemplo:
Private
CmdExcluiGrupo_click() Dim nome as string nome = inputbox("Informe o nome Grupo a excluir : ", "EXCLUIR GRUPO") Workspace(0).Groups.Delete nome End Sub |
Observe que usamos o objeto Workspace implícito sem a necessidade de declarar uma variável de objeto para banco de dados.
Por padrão o Jet cria dois grupos que possuem atributos especiais que você deverá levar em conta quando for implementar o seu sistema de segurança. São eles os grupos : Users e Admins.
Os membros do grupo Admins poderão criar e apagar usuários e grupos com capacidade de permitir o acesso aos objetos do banco de dados e alterar as senhas dos usuários.
O grupo Users é o grupo padrão ao qual todos os novos usuários são adicionados quando criados. Os membros deste grupo tem permissão total para acessar qualquer objeto do banco de dados criado. ( Se não fosse assim você teria que atribuir permissões aos novos usuários.)
Até mais ver...
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Programando o sistema de segurança do Access - Macoratti ...