seguridad sin mdw

7- Sistema seguridad sin adjuntar Grupo de Trabajo (fichero MDW)

 

 

Autor: Márius Puig (2005)

 

Atencion: Solo valido para ACCESS 2000 , 2002 (XP)  y 2003

 


En este ejemplo veremos como se puede abrir una tabla de una base de datos con “seguridad por usuarios” sin adjuntar el archivo de seguridad específico. Este sistema nos da un nivel mas alto de seguridad pero obliga a trabajar con recordsets y no se pueden usar consultas guardadas; antes de implantarlo se deberían tener en cuenta estas características y valorar si estamos dispuestos a asumir el trabajo adicional que supone hacerlo de esta forma, pues todo se deberá hacer por código y existen limitaciones en algunos objetos (p.e. los informes en Access 2000 no tienen recordset).

 

CREACIÓN DEL BACKEND

1- Creamos una carpeta donde pondremos todos los ficheros del ejemplo.

c:\pruebas33  

2- Entramos en el "Administrador de grupos de Access".

- nos indicará a que grupo estamos unidos y en que carpeta se encuentra(p.e. c:\Archivos de programa\Archivos comunes\System\System.mdw)

 

- pulsamos en la opción de “Crear”

 

- escribimos el Id, Nombre y Organización que queramos y aceptamos

- en la siguiente pantalla indicamos la ubicación el nombre del archivo

 

c:\pruebas33\seguro33.mdw y aceptamos.

 3- Ahora estaremos “unidos” al grupo de trabajo c:\pruebas33\seguro33.mdw, para evitar problemas antes de continuar con el ejemplo, volvemos a entrar al "Administrador de grupos de Access" para unirnos al mdw estándar.

- pulsamos en el botón “ unirse”
- y escribimos la ruta y nombre del grupo tal como estaba inicialmente en el punto 2

 

4- Para facilitar el proceso para este ejemplo y no tener que estar cambiando de grupo de trabajo, crearemos un acceso directo en el escritorio que nos “una” automáticamente a este grupo.

- en Destino indicamos la ruta completa de Access
"C:\Archivos de programa\Microsoft Office\Office\MSACCESS.EXE"
- y añadimos el parámetro /wrkgrp seguido del nombre del grupo de trabajo

 

"C:\Archivos de programa\Microsoft Office\Office\MSACCESS.EXE" /wrkgrp C:\pruebas33\seguro33.mdw
- en la pestaña General indicamos el nombre del acceso directo (SEGURO33 mdw) y aceptamos

 

5- Entramos en Access a través del acceso directo y pulsamos en el menú.

- Herramientas/Seguridad/Cuentas de usuario y de grupo

- en la pestaña Usuarios añadimos un nuevo usuario (en mayúsculas para evitar errores)

 

- pulsamos el botón “Nuevo...”
- en nombre: SEGURO33

- en id: SEGURO33

  - aceptamos y salimos de Access

 

6- Vamos a modificar el acceso directo.

- añadimos al final de destino /user SEGURO33

 

- y aceptamos

7- Entramos de nuevo a través del acceso directo, ahora el usuario ya es el SEGURO33,   si lo queremos comprobar vamos a Herramientas/Seguridad/Cuentas de usuario y de grupo/Cambiar contraseña.

- creamos una nueva base de datos y la guardamos en la carpeta  
"c:\pruebas33\backend33.mdb"
- vamos al menú Herramientas/Seguridad/Permisos
- en tipo de objeto seleccionamos:
Base de datos
- marcamos
grupos y seleccionamos grupo  Administradores
- quitamos TODOS los permisos y pulsamos en Aplicar

 

- seleccionamos grupo  Usuarios , quitamos TODOS los permisos, y aplicamos

 

- marcamos Usuarios y seleccionamos el   usuario Administrador
 

 

- si no lo están, quitamos TODOS los permisos y aceptamos

8- Creamos una tabla de prueba Tabla1.

- añadimos un par de campos y guardamos
(p.e.
ID – autonumérico y DATO1 – texto 50)
- abrimos la tabla y agregamos un par de registros
- salimos de Access

9- Vamos a modificar otra vez el acceso directo.

 - entre la ruta de Access y el parámetro /wrkgrp añadimos C:\pruebas33\backend33.mdb
- y aceptamos

 

10- Entramos en Access a trabes del acceso directo.

- comprobamos que SI podemos leer los datos de la Tabla 1 y salimos

 

11- Entramos en Access por el acceso "normal".

- abrimos la base backend33.mdb y comprobamos que NO tenemos permisos para abrirla

 

 

 

 

CREACIÓN DEL FRONTEND

 

1- Entramos en Access por el acceso "normal".

- creamos una nueva mdb ( C:\pruebas33\Front33.mdb )
- en la pestaña Módulos, pulsamos en Nuevo
- y copiamos las 2 funciones (
AWunlookMDB y AWgetUserGroup )

Option Compare Database
Option Explicit
Public wsp As DAO.Workspace

Public Function AWunlookMDB() As Boolean
Dim newUSR As User
Dim wspADM As DAO.Workspace

If AWgetUserGroup(CurrentUser, "Admins") = False Then
AWunlookMDB = False
    Exit Function
End If
On Error GoTo ERRunlookMDB
If AWgetUserGroup("Seguro33") = False Then
    Set wspADM = DBEngine.Workspaces(0)
    With wspADM
        Set newUSR = .CreateUser("SEGURO33")
        newUSR.PID = "SEGURO33"
        .Users.Append newUSR
        newUSR.Groups.Append newUSR.CreateGroup("Users")
    End With
End If
 
Set wsp = DBEngine.CreateWorkspace("WSPMASTER", "SEGURO33", "", dbUseJet)
DBEngine.Workspaces.Append wsp
wspADM.Users.Delete "SEGURO33"
AWunlookMDB = True

ERRunlookMDB:
Set wspADM = Nothing
Set newUSR = Nothing
End Function

Public Function AWgetUserGroup(strUser, Optional strGroup = Null) As Boolean
Dim tmpWSP As DAO.Workspace
Dim tmpGroups, tmpUsers
Set tmpWSP = DBEngine.Workspaces(0)
With tmpWSP
For Each tmpUsers In .Users
    If tmpUsers.Name = strUser Then
        If Not IsNull(strGroup) Then
        For Each tmpGroups In tmpUsers.Groups
            If tmpGroups.Name = strGroup Then
             AWgetUserGroup = True
            Exit For
            End If
        Next
        Else
        AWgetUserGroup = True
        Exit For
        End If
    End If
Next
End With
Set tmpWSP = Nothing
End Function
 
- en Herramientas / Referencias marcamos: Microsoft DAO 3.6
- compilamos y guardamos el modulo

 

 2- Vamos a crear un formulario nuevo.

- añadimos 2 cuadros de texto con los campos de tabla 1 (ID y DATO1)
- en el evento OPEN ponemos el siguiente código

Option Compare Database
Option Explicit


Dim newMDB As DAO.Database
 
Private Sub Form_Open(Cancel As Integer)
Dim rst As DAO.Recordset
If AWunlookMDB = False Then
    MsgBox "Ha ocurrido un error no controlado"
    Exit Sub
End If


On Error GoTo errOpen


Set newMDB = Workspaces("WSPMASTER").OpenDatabase(Application.CurrentProject.FullName)
    On Error Resume Next
    newMDB.TableDefs.Delete "TABLA1"

    On Error GoTo 0
    newMDB.TableDefs.Append newMDB.CreateTableDef("TABLA1", 0, "TABLA1", ";DATABASE=" & Application.CurrentProject.Path & "\backend33.MDB")
    Set rst = newMDB.OpenRecordset("Select * from TABLA1", dbOpenDynaset)


Set Me.Recordset = rst
Set newMDB = Nothing
Set rst = Nothing
Exit Sub
 
errOpen:
MsgBox Err.Number & " " & Err.Description
End Sub
 
- compilamos y guardamos el formulario 

 

3- Abrimos el formulario y deberíamos ver los datos de la Tabla 1.

 

- Si intentamos abrir directamente la tabla , aparecerá el mensaje

-- FIN EJEMPLO – ACCESS 2000 o superior


 

COPIAR DATOS DEL BACKEND A UNA TABLA DEL FRONTEND

Usando la base de datos anterior (front33.mdb).


1- Creamos una nueva tabla con la misma estructura de datos que
la Tabla 1, guardamos con el nombre Tabla2

2- Creamos un nuevo formulario y añadimos el siguiente código en el evento Open

 

Option Compare Database
Option Explicit


Dim newMDB As DAO.Database
 

Private Sub Form_Open(Cancel As Integer)

If AWunlookMDB = False Then
  MsgBox "Ha ocurrido un error no controlado"
  Exit Sub
End If

On Error GoTo errOpen

  Set newMDB = Workspaces("WSPMASTER").OpenDatabase(Application.CurrentProject.FullName)
On Error Resume Next
  newMDB.TableDefs.Delete "TABLA1"

On Error GoTo 0
  newMDB.TableDefs.Append newMDB.CreateTableDef("TABLA1", 0, "TABLA1", ";DATABASE=" & Application.CurrentProject.Path & "\backend33.MDB")
  newMDB.Execute "INSERT INTO Tabla2 (Id, Dato1 ) SELECT Id, Dato1 FROM tabla1"
  MsgBox "Datos copiados"

  Set newMDB = Nothing
Exit Sub

errOpen:
  MsgBox Err.Number & " " & Err.Description
End Sub
 

 

3- Si abrimos la Tabla 2 veremos que se han copiado los datos de Tabla1 a la Tabla2

-- FIN EJEMPLO ACCESS 2000 o superior

 

 

 

 

[Atrás]