Ocultar objetos en base de datos Access remota

Empiezo mi colaboración con el blog de mi amigo Ángel agradeciendo su generosidad, simpatía y sobre todo sus ganas de enseñar y compartir. Es un placer escribir para todos vosotros, espero que os gusten mis aportaciones.

Algunos me conoceréis por mi blog ProgramadorDePalo, otros por anteriores proyectos (aquellos maravillosos años de PHP-Nuke y Songohack.com) y otros no habréis oído hablar de mí. Para ponernos en situación, os cuento que estoy escribiendo una serie de artículos sobre seguridad en Access con VBA, que es mi herramienta de trabajo además de mi pasión. El objetivo es llegar a tener una aplicación lo suficientemente segura como para cumplir los requerimientos de la LOPD para datos de nivel alto.

En el último artículo de la serie, Ocultar tablas en base de datos Access, expliqué la forma más sencilla y segura (por lo menos desde mi punto de vista) de ocultar tablas tanto en una base de datos local como en una base de datos remota. Aunque parezca que utilizando el resto de Medidas de seguridad para aplicaciones Access, no tiene sentido ocultar los objetos de una base de datos, yo creo que cuantas más capas de seguridad tengamos, más difícil le resultará a un usuario malintencionado saltarse nuestra seguridad (además evita que usuarios no malintencionados pero del tipo “me gusta tocar donde no debo” accedan a objetos que no queremos que accedan).

En este artículo os mostraré la manera de ocultar consultas (similar a ocultar tablas), macros, módulos de VBA, informes, relaciones y formularios. Como en el resto de artículos, explicaré brevemente cómo se hace y los posibles problemas que os encontraréis y al final del artículo insertaré las funciones que podréis copiar para utilizarlas en vuestras aplicaciones.

Empezaremos con la función que utilizo para ocultar consultas que es muy similar a la de ocultar tablas ya que utiliza el mismo método. Le pasamos a la función la ruta de la base de datos, la contraseña y un parámetro booleano para que oculte o muestre las consultas. Utilizaremos los mismos métodos que en el artículo anterior, GetHiddenAttribute y SetHiddenAttribute.

Declaramos la función:

Y declaramos las variables:

Como veis, en este caso no declaramos un Tabledef ya que en vez de recorrer tablas, queremos recorrer consultas. Para ello utilizaremos un Querydef. Lo que sigue igual son las variables Workspace (para bases de datos remotas), Database (le pasaremos la ruta de nuestra base de datos) y el objeto Application (necesario para abrir la base de datos y utilizar GetHiddenAttribute y SetHiddenAttribute).

Una vez declaradas las variables, abrimos la base de datos y el objeto Application:

Y pasamos a recorrer las consultas de nuestra base de datos teniendo cuidado de no modificar las consultas “de sistema” (realmente son consultas para campos calculados, etc):

Ya solo nos queda cerrar la base de datos y el objeto Application (si vamos a ocultar varios objetos a la vez, podemos crear una función para abrir objetos y otra para cerrarlos y utilizarlas solo una vez. Si abrimos y cerramos para cada objeto, las funciones tardan bastante más).

Ahora sólo nos quedaría llamar a la función con el parámetro Oculta=TRUE para ocultar y con Oculta=FALSE para mostrar.

El procedimiento para el resto de objetos es similar con una pequeña modificación, necesitamos introducir el Objeto Containers de una base de datos para recorrer cada uno de los objetos. También necesitaremos un objeto Document para que nos dé información sobre cada instancia del objeto. Vamos con las declaraciones de uno de los objetos (por ejemplo módulos), el resto serán iguales:

Abrimos la base de datos y el objeto Application (realmente lo que hace es abrir la aplicación Access):

Y pasamos a recorrer el tipo de objeto:

Y cerramos:

Como veis, es muy sencillo hacerlo en remoto ya que realmente abrimos la base de datos y la tratamos como si estuviera en local. He añadido todas estas funcionalidades al Administrador de Aplicaciones Access utilizando básicamente estas funciones (mejorando un poco el código para no tener que abrir cada vez y cerrando las conexiones persistentes en caso de estar en desconexión pasiva de usuarios. Pero aquí os las dejo todas por si las necesitáis:

Ocultar Consultas

Ocultar Módulos

Ocultar Macros

Ocultar Informes

El resto de objetos se ocultarían de la misma manera, cambiando el nombre del Container. Podéis investigar un poco agregando una inspección en una de las funciones anteriores al objeto Base.Containers. Os mostrará todas la posibilidades.

Para cualquier duda o petición, utilizad los comentarios de este artículo.

photo credit: Frederic Poirot via photopin cc

Estudió formación profesional en la rama de electrónica hasta que descubrió el apasionante mundo de los ordenadores personales. Desde entonces, la administración de bases de datos, hojas de cálculo y programación en Microsoft Visual Basic para aplicaciones le han acompañado hasta el día de hoy. En estos momentos, su principal interés está enfocado a portabilizar las bases de datos a dispositivos móviles Windows e IOS, en entornos cliente servidor, enfocado en desarrollos con Microsoft Access, FileMaker y Servidores en la nube como Microsoft SQL Azure.

1 comentario

  1. Responder JESSICA

    me parece un error en la funcion para ocultar consultas
    muestra un error en la linea
    If Left(ConsulDef.name, 3) “~sq”

    me podrias apoyaar

Deja un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR