Programación sobre la seguridad de Access

Les ofrezco una visión global del mecanismo de seguridad de Access y la forma de administrar la misma con código VB. Aclaro que VB no proporciona ningún método para crear una BD del sistema de seguridad, pero si cuenta con la capacidad de administrar la seguridad que esta provee.


Seguridad de Access

Las versiones recientes de Microsoft Access ofrecen dos métodos para proteger una base de datos: contraseña para abrir un archivo de base de datos o mediante seguridad a nivel de usuario o de cuentas. Además de estos métodos, puede eliminar código modificable de VB de la base de datos y así proteger el diseño de formularios, informes y módulos de la base de datos de posibles modificaciones guardándolo como un archivo MDE. Estos últimos tópicos no serán tratados en este documento.


Contraseña de Archivo MDB

Brevemente me refiero a esta opción para centrarnos en el Sistema de Cuentas que es el propósito de este articulo. El método Contraseña de Archivo MDB es simple y consiste en habilitar una contraseña para abrir un archivo MDB especifico. El método es el adecuado para una base de datos que esté compartida entre un pequeño grupo de usuarios o sobre un sólo equipo. No es aplicable si quiere replicar la BD o pretende implantar un sistema de seguridad en red. Si desea abrir una BD con contraseña de archivo siga este código:


    Dim wrkJet As Workspace
    Dim dbsM97 As Database
    Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)
    Set dbsM97 = wrkJet.OpenDatabase("miBD.mdb", True, False, ";PWD=miContraseña")

Tenga en cuenta este código porque en ninguna parte de la ayuda en línea lo encuentra tan claro.

En caso de usar el DataControl, hacerlo de esta forma, (dato de Jose Ramon):

Data1.Connect = ";pwd=MiClave"

Para compactar una BD con contraseña pueden seguir este ejemplo particular (dato de Jose Ramon Laperal):

DBEngine.CompactDatabase "MiBase", "MiBaseCompacta", dbLangGeneral, _
			dbVersion30, ";pwd=MiClave"

El exito de la intrucción depende de los parámetros suministrados.


Sistema de Cuentas

Los usuarios son obligados a identificarse y escribir una contraseña cuando inician Microsoft Access o una Aplicación Access. La seguridad se basa en permisos, los cuales son atributos para un grupo o usuario. Por ejemplo, a un grupo bautizado Usuarios_Alpha se les permita visualizar, introducir o modificar datos en una tabla Clientes, pero no se les permita cambiar el diseño de esa tabla, ni accesar otras tablas. Así un usuario que pertenezca a este grupo sólo tendrá estos atributos y, en particular, los que le quiera dar un Administrador.


Las tres razones principales para utilizar la seguridad a nivel de usuario son las siguientes:

Proteger la propiedad intelectual del código.
Impedir que los usuarios cambien o inutilicen inadvertidamente una aplicación cambiando código de objetos de los que depende la aplicación.
Proteger los datos sensibles de la base de datos.


Si quieren entender plenamente el sistema de seguridad, es necesario estudiar los conceptos del mismo, como son varios, y la teoría es amplia, les tengo que sugerir el capitulo Protección de la aplicación, en el manual Creación de aplicaciones que viene con Microsoft Access (2.0/95/97). Pero para los que están de afán, le sugiero esta receta para crear un sistema de seguridad:


1. Crear a o unirse a grupo de trabajo

Textualmente, Un grupo de trabajo de Microsoft Access es un grupo de usuarios en un entorno multiusuario que comparten datos. Un Grupo de Trabajo se sirve de un archivo donde se almacenan las cuentas. Puede usar una predeterminado, uno existente o crear uno nuevo. Para esto emplea el Administrador para grupos de trabajo., busque el archivo Wrkgadm.exe (Access 2.0 o superior).


2. Cree una Cuenta de Propietario y Una de Administrador.

Con el Grupo de Trabajo activo, inicie MS Access, abra una BD, menú Usuarios, Usuario, del cuadro de dialogo escoja Nuevo, del cuadro de dialogo escriba el Nombre y un ID personal (esta combinación identificara al usuario de aquí en adelante) y Aceptar. Para crear la cuenta de propietario siga las mismas instrucciones. El Administrador administrara el Grupo de Trabajo, el propietario como su nombre lo indica, será el dueño de la BD y sus objetos.


3. Activar el procedimiento de inicio de sesión

Una BD será protegida cuando el administrador tenga contraseña y tenga Titularidad. Con el Grupo de Trabajo activo, inicie MS Access, abra una BD, menú Cambiar Contraseña, Cambiar Contraseña. Siga el cuadro de dialogo. La próxima vez que inicie Access, el cuadro de dialogo Conexión solicitara el nombre de un usuario y su contraseña.


4. Cambie la Titularidad

Inicie la sesión con la cuenta del nuevo Administrador creado anteriormente, Cree una nueva BD: menú Archivo, Complementos, Importar BD. Seleccione el archivo MDB cuya titularidad desea cambiar, y de Aceptar. También puede cambiar la titularidad de un objeto individual, desde los diálogos Cambiar Propietario, pero no desviemos la atención. Valga aclara que las bases de datos creadas desde una sesión de grupo, no necesitan cambiar su titularidad porque la traen de nacimiento.


5. Cree las cuentas de los Usuarios.

Cree grupos y usuarios de la siguiente manera. Abra la BD, menú seguridad, Grupos o Usuarios, siga los diálogos. Los PID son importantes para el administrador, no para los usuarios, anotelos. Después de creados los usuarios y grupos, puede hacer que un usuario, digamos John, pertenezca a un grupo y así limite sus permisos. Para generalizar, recuerde, la administración de las cuentas se lleva a cabo desde el menú Seguridad, creo que no necesitas memorizar más recetas.


6. Asignar Autorizaciones

Una vez creadas las cuentas, puede asignar autorizaciones a esas cuentas. Menú seguridad, autorizaciones. Importante: su BD no estará segura hasta no eliminar las autorizaciones del usuario Administrador y del grupo Usuarios (cuentas predeterminadas de Access). En realidad la administración de autorizaciones es el proceso donde invertirá la mayor parte del tiempo (la lógica de autorizaciones se aprende ensayando). Tenga presente en autorizaciones no solo a las tablas, también a las consultas, módulos y formularios.


7. Asignar Contraseñas

Al fin llegamos al paso fácil. Asígnele una contraseña a cada uno de sus usuarios. Es más rápido con código VB. Con Access, tiene que iniciar Access con cada cuenta, ir al menú Seguridad, Cambiar Contraseña y asignar el password. Si un usuario no tiene contraseña, cualquiera puede entrar con el nombre de ese usuario, en ese momento la contraseña es una cadena vacía. Un usuario puede cambiar su contraseña en el momento que lo desee.

Otro nivel es la codificación de la BD, pero aun no he llegado a este extremo. Es útil para protegerse de hackers ¿ o, no ?. No es difícil, pero sí riesgoso (opinión personal). Desde el menú Archivo, seleccione Codificar/Decodificar BD.

Si llego hasta aquí, y no esta aún frustrado, me alegra. Vea lo que le espera para implantar una aplicación que acceda una BD protegida.


Código Visual Basic

VB proporciona una interfaz poderosa de código para administrar un sistema de cuentas. Pero antes que se anime, lo más crítico es decirle a VB cual BD del sistema usar. Tengan presente esta cita:

Cuando se instala el controlador de bases de datos motor Microsoft Jet, el programa de instalación escribe un juego de valores predeterminados en el Registro de Windows en las subclaves Engines y ISAM, para Jet 3.0. Para Jet 2.5, los valores de inicialización se encuentran en el archivo VB.INI o en el archivo <NOMBREAPL>.INI, dependiendo del valor de la propiedad IniPath del objeto DBEngine.

Es decir, muy posiblemente tendrá que vérselas con el espantoso Regedit.Exe o con los INI si usa aplicaciones de 16 bits. Al respecto, le recomiendo buscar en la ayuda en línea estos temas:

Ayuda, Tab [Index], busque inicio del motor de base de datos, y seleccione el titulo Cambio de la configuración ISAM del motor Microsoft Jet.


Ejemplos Visual Basic

Puede lanzarse a programar con VB. Los siguientes bloques de código los obtuve de la ayuda en línea, los refine y organice. Son para DAO 3.5, para otras versiones el códigos es similar, solo que más sencillos. Ha sido fuente de información mía. El módulo es muy completo y didáctico.


Por favor Guille, coloca aquí un vinculo para bajar el archivo que contiene este documento y el modulo de ejemplos:
Aquí está el link solicitado (Harvey_MSJet.zip 7.7 KB)



Atentamente,
Harvey Triana, Petrosoft Colombia, 1997
psoft@latino.net.co