Este documento describe varias técnicas de seguridad en Access, incluyendo ocultar objetos, propiedades de inicio de la base de datos, y la macro AutoExec. Explica cómo ocultar objetos cambiando su atributo de oculto y mostrar u ocultar objetos ocultos. También describe las propiedades de inicio y cómo modificarlas por código para controlar el comportamiento inicial de la base de datos, como mostrar u ocultar la ventana de base de datos. Finalmente, explica que una macro llamada AutoExec se ejecutará automáticamente al iniciar la base
Este documento presenta una introducción al lenguaje de programación VBA para Access. Explica brevemente qué son las macros y sus limitaciones, y cómo convertir macros en procedimientos de código para tener más control y posibilidades. También introduce conceptos básicos como cómo escribir procedimientos, ejecutarlos, y utilizar variables.
Cuadro combinado filtrado microsoft access - todoexpertos.comssuser3a82fb
Este documento describe cómo filtrar un cuadro combinado en un formulario de Access para que muestre solo los registros asociados con una selección realizada en otro formulario. Un usuario pregunta cómo filtrar un cuadro combinado en un formulario principal para que muestre solo los datos de una ciudad seleccionada en un formulario inicial. Un experto en Access responde explicando cómo usar una variable pública para almacenar la selección y filtrar el cuadro combinado en el formulario principal usando una consulta SQL basada en esa variable.
El documento describe cómo usar NetBeans para acceder a una base de datos MySQL y manipular datos. Explica cómo crear tablas, insertar y consultar registros, y plasmar los datos en un formulario Java para mostrarlos de manera más visual. También cubre cómo establecer la conexión a la base de datos y programar el formulario para cargar automáticamente los datos al abrirse.
Este documento presenta la primera lección de un curso sobre Visual Basic 6.0. Introduce Visual Basic como un lenguaje de programación para crear aplicaciones de Windows y explica cómo los eventos controlan las acciones de un programa. También describe los principales componentes del entorno de desarrollo de Visual Basic como el formulario, el cuadro de herramientas y la ventana de propiedades. Finalmente, incluye una práctica para crear una primera aplicación simple usando estos elementos.
Este documento describe cómo crear una aplicación en Visual Basic que permita sumar y restar dos números introducidos por el usuario. La aplicación incluye cuatro botones para sumar, restar, borrar los números y salir de la aplicación, así como tres etiquetas y tres cuadros de texto para mostrar los números y el resultado. El documento proporciona instrucciones detalladas sobre cómo configurar la interfaz y agregar código a los botones para realizar las operaciones matemáticas correspondientes.
Este documento proporciona instrucciones para diseñar una base de datos en Access que almacene datos básicos de usuario y luego conectarla a una aplicación de Visual Studio para mostrar los datos concatenados del usuario. Explica cómo crear tablas en Access para almacenar datos como nombre, apellido, correo electrónico y luego cómo conectar la base de datos a Visual Studio usando ADO.NET para recuperar los datos y mostrarlos en un formulario.
Este documento proporciona una introducción a la programación orientada a objetos en Visual Basic.NET. Explica conceptos clave como eventos, manejadores de eventos, procedimientos, propiedades de formularios, y sintaxis básica como declaración de variables, clases, objetos, y sentencias de control. El objetivo es que los estudiantes aprendan a crear aplicaciones de escritorio usando VB.NET.
El documento presenta una lista de temas relacionados con el desarrollo de aplicaciones en Visual FoxPro. Incluye secciones sobre aplicaciones, bases de datos, direcciones, controles, fechas y tiempo, ficheros, formularios, gráficos, impresión, informes, internet, pantalla, redes, SQL, tablas, funciones varias y vistas y consultas. Cada sección contiene varios subtemas con ejemplos de código y descripciones breves.
Este documento presenta una introducción al lenguaje de programación VBA para Access. Explica brevemente qué son las macros y sus limitaciones, y cómo convertir macros en procedimientos de código para tener más control y posibilidades. También introduce conceptos básicos como cómo escribir procedimientos, ejecutarlos, y utilizar variables.
Cuadro combinado filtrado microsoft access - todoexpertos.comssuser3a82fb
Este documento describe cómo filtrar un cuadro combinado en un formulario de Access para que muestre solo los registros asociados con una selección realizada en otro formulario. Un usuario pregunta cómo filtrar un cuadro combinado en un formulario principal para que muestre solo los datos de una ciudad seleccionada en un formulario inicial. Un experto en Access responde explicando cómo usar una variable pública para almacenar la selección y filtrar el cuadro combinado en el formulario principal usando una consulta SQL basada en esa variable.
El documento describe cómo usar NetBeans para acceder a una base de datos MySQL y manipular datos. Explica cómo crear tablas, insertar y consultar registros, y plasmar los datos en un formulario Java para mostrarlos de manera más visual. También cubre cómo establecer la conexión a la base de datos y programar el formulario para cargar automáticamente los datos al abrirse.
Este documento presenta la primera lección de un curso sobre Visual Basic 6.0. Introduce Visual Basic como un lenguaje de programación para crear aplicaciones de Windows y explica cómo los eventos controlan las acciones de un programa. También describe los principales componentes del entorno de desarrollo de Visual Basic como el formulario, el cuadro de herramientas y la ventana de propiedades. Finalmente, incluye una práctica para crear una primera aplicación simple usando estos elementos.
Este documento describe cómo crear una aplicación en Visual Basic que permita sumar y restar dos números introducidos por el usuario. La aplicación incluye cuatro botones para sumar, restar, borrar los números y salir de la aplicación, así como tres etiquetas y tres cuadros de texto para mostrar los números y el resultado. El documento proporciona instrucciones detalladas sobre cómo configurar la interfaz y agregar código a los botones para realizar las operaciones matemáticas correspondientes.
Este documento proporciona instrucciones para diseñar una base de datos en Access que almacene datos básicos de usuario y luego conectarla a una aplicación de Visual Studio para mostrar los datos concatenados del usuario. Explica cómo crear tablas en Access para almacenar datos como nombre, apellido, correo electrónico y luego cómo conectar la base de datos a Visual Studio usando ADO.NET para recuperar los datos y mostrarlos en un formulario.
Este documento proporciona una introducción a la programación orientada a objetos en Visual Basic.NET. Explica conceptos clave como eventos, manejadores de eventos, procedimientos, propiedades de formularios, y sintaxis básica como declaración de variables, clases, objetos, y sentencias de control. El objetivo es que los estudiantes aprendan a crear aplicaciones de escritorio usando VB.NET.
El documento presenta una lista de temas relacionados con el desarrollo de aplicaciones en Visual FoxPro. Incluye secciones sobre aplicaciones, bases de datos, direcciones, controles, fechas y tiempo, ficheros, formularios, gráficos, impresión, informes, internet, pantalla, redes, SQL, tablas, funciones varias y vistas y consultas. Cada sección contiene varios subtemas con ejemplos de código y descripciones breves.
Este documento explica cómo utilizar SQL en Visual Basic 6.0, incluyendo cómo crear una base de datos, ejecutar consultas SQL utilizando objetos Data y mostrar los resultados en un control MSFlexGrid. Describe los comandos SQL internos y externos, así como cláusulas, operadores lógicos y sintaxis básica de consultas. También proporciona ejemplos de consultas SQL simples.
pasos para hacer una mini agenda en visual basic 6.0yeimimorel
Este documento proporciona instrucciones paso a paso para crear una agenda personal básica en Visual Basic 6.0. Explica cómo crear una carpeta para almacenar el proyecto, abrir Visual Basic, agregar controles como etiquetas y botones, conectar la interfaz con una base de datos Access mediante el Administrador de datos visual, y programar los botones para agregar, editar y eliminar registros. El proceso consta de 29 pasos para guiar al lector en la creación de esta pequeña aplicación de escritorio.
Este documento describe los controles comunes de Visual Basic, incluyendo botones, casillas de verificación, listas desplegables, barras de progreso, botones de opción, cuadros de texto enriquecidos y otros. Cada control tiene propiedades y métodos específicos que permiten personalizar su apariencia y comportamiento para facilitar el desarrollo de aplicaciones.
Este documento presenta las instrucciones para crear formularios y objetos en Visual Studio .NET utilizando C# para un sistema de ventas. Incluye instrucciones para crear un formulario de acceso y actualización de datos en modo conectado, un formulario de inicio de sesión, y un formulario principal MDI. El objetivo es crear la interfaz gráfica básica del sistema utilizando plantillas, controles y código para proporcionar funcionalidad.
El documento describe tres formas de conectarse a bases de datos en Visual Basic 2010: conectarse a SQL Server usando SqlClient, conectarse a una base de datos de Access usando OLE DB, y conectarse a una base de datos a través de un origen de datos ODBC. Se proporciona código de ejemplo para cada uno que muestra cómo crear una conexión, un adaptador de datos y llenar un conjunto de datos con los resultados de una consulta.
Este documento describe los pasos para crear una aplicación en NetBeans que permita acceder a una base de datos MySQL. Estos pasos incluyen: 1) crear un nuevo proyecto Java en NetBeans, 2) agregar la biblioteca JDBC de MySQL, 3) conectarse a la base de datos MySQL mediante la creación de una conexión, y 4) desarrollar una interfaz gráfica que muestre los datos de una tabla en la base de datos al cargarla y mostrarla en listas.
Este documento explica cómo añadir y configurar controles en formularios de VB.NET. Describe los pasos para agregar botones, etiquetas y cuadros de texto y configurar sus propiedades como el texto, color y eventos. También explica cómo configurar la cuadrícula del diseñador para posicionar controles con precisión y cómo crear manipuladores de eventos para responder a interacciones del usuario.
1. El documento proporciona 61 ejercicios sobre el uso de jQuery para manipular elementos HTML de diferentes maneras, como ocultar, mostrar y modificar elementos, añadir y quitar clases CSS, y manejar eventos como clicks de botones. Los ejercicios cubren una variedad de selectores, métodos y funciones de jQuery.
El documento describe los diferentes controles de diseño de interfaz de usuario en Visual Basic, incluyendo sus propiedades y eventos. Explica que el formulario es el primer objeto que se visualiza y constituye la ventana principal, y que los otros controles como etiquetas y botones se colocan en él. Luego detalla las características y funcionalidad de controles específicos como TabControl, Panel, GroupBox, FlowLayoutPanel y SplitContainer.
Este documento describe las propiedades, eventos y métodos de los formularios y contenedores en Visual Basic. Explica que los formularios son la ventana principal donde se colocan otros controles y que tienen propiedades como nombre, color de fondo y estilo de borde. También cubre eventos como Load, Click y Closing. Además, describe varios controles contenedores como TabControl, Panel, GroupBox y sus propiedades y eventos. Finalmente, explica métodos como AddObject y Drag.
Este documento describe los formularios MDI y cómo crearlos en Visual Basic. Los formularios MDI son formularios contenedores que pueden alojar otros formularios secundarios. Un proyecto solo puede tener un formulario MDI principal que actúa como contenedor, mientras que puede tener múltiples formularios secundarios. Los menús se pueden agregar al formulario MDI principal y aparecerán en la barra de menús de todos los formularios secundarios.
Aplica los fundamentos de programacion webmiguel9728
La Web fue creada en 1989 por Tim Berners-Lee en el CERN. Es un sistema de distribución de información basado en hipertexto e hipermedios accesibles a través de Internet. Un sitio web es una colección de páginas web relacionadas bajo un dominio, y una página web es un documento HTML/XHTML accesible a través de HTTP. El HTML se utiliza para describir la estructura y la información de las páginas web mediante etiquetas.
El documento proporciona instrucciones sobre cómo instalar e implementar JasperReports y el plugin iReport en NetBeans para generar informes dinámicos. Explica cómo agregar librerías, crear datos fuente, diseñar reportes, agregar parámetros y ejecutar reportes desde una aplicación Java.
Este documento describe tres ejemplos de conexiones ADO.Net a una base de datos SQL. El primer ejemplo muestra una conexión a nivel de formulario. El segundo ejemplo demuestra una conexión a nivel de proyecto utilizando una variable pública y procedimientos. El tercer ejemplo es similar pero controla errores mediante excepciones.
Este documento describe los conceptos básicos de la programación orientada a objetos en Visual Basic 6.0, incluyendo objetos, propiedades, eventos, controles, formularios y más. Explica que los objetos son elementos visuales en pantalla como botones y cajas de texto, que tienen propiedades como tamaño y texto, y que responden a eventos del usuario. También describe la diferencia entre el modo de diseño y modo de ejecución de una aplicación en Visual Basic.
Este documento explica cómo conectar una aplicación desarrollada en Visual Basic .NET con una base de datos SQL Server 2008. Se detallan 14 pasos para establecer la conexión entre el lenguaje de programación y la base de datos, y desarrollar una interfaz gráfica para interactuar con la información almacenada. El objetivo es que los estudiantes aprendan a crear aplicaciones .NET que puedan acceder y modificar datos en SQL Server.
1) El documento describe los pasos para conectar una base de datos Access y SQL a un programa en Visual Basic, incluyendo configurar el controlador ODBC, establecer la cadena de conexión, y seleccionar los campos. 2) También explica cómo crear una aplicación gráfica en Visual Basic que se conecta a la base de datos SQL, agregando controles, escribiendo código, y programando los botones. 3) Finalmente, detalla cómo conectar una base de datos MySQL a Visual Basic mediante el uso de la librería MySQL Connector .NET.
Este documento describe la herencia visual de formularios en .NET. Explica que la herencia visual permite derivar un formulario de otro formulario base, heredando sus propiedades y comportamientos. Detalla cómo crear un formulario heredado en el diseñador y cómo los eventos y métodos se ejecutan tanto en el formulario base como en el derivado. Finalmente, presenta un ejemplo práctico de un formulario base que devuelve datos y un formulario heredado que los muestra en una grilla, demostrando la reutilización de código a través de la her
Este documento presenta información sobre el desarrollo de aplicaciones móviles utilizando sensores. Explica cómo implementar una base de datos SQLite en Xamarin y describe los pasos para crear funciones básicas como registro, inicio de sesión y consulta de datos almacenados. También incluye detalles sobre el uso de sensores como la cámara en dispositivos móviles.
Este documento presenta una introducción a las inyecciones SQL y técnicas básicas para llevarlas a cabo. Explica qué es una inyección SQL, el lenguaje SQL y cómo evitarlas. Luego describe consultas SQL básicas como SELECT, INSERT, DELETE, UPDATE y DESCRIBE. Finalmente, muestra cómo salir de las variables de consulta y realizar inyecciones utilizando datos alfanuméricos y numéricos.
Este documento describe los conceptos básicos de la programación orientada a objetos como la abstracción, encapsulación, herencia y polimorfismo. Explica cómo crear una clase Empleado en Visual Basic .NET para modelar los procesos de un empleado dentro de una aplicación de gestión empresarial utilizando una perspectiva orientada a objetos.
Este documento explica cómo utilizar SQL en Visual Basic 6.0, incluyendo cómo crear una base de datos, ejecutar consultas SQL utilizando objetos Data y mostrar los resultados en un control MSFlexGrid. Describe los comandos SQL internos y externos, así como cláusulas, operadores lógicos y sintaxis básica de consultas. También proporciona ejemplos de consultas SQL simples.
pasos para hacer una mini agenda en visual basic 6.0yeimimorel
Este documento proporciona instrucciones paso a paso para crear una agenda personal básica en Visual Basic 6.0. Explica cómo crear una carpeta para almacenar el proyecto, abrir Visual Basic, agregar controles como etiquetas y botones, conectar la interfaz con una base de datos Access mediante el Administrador de datos visual, y programar los botones para agregar, editar y eliminar registros. El proceso consta de 29 pasos para guiar al lector en la creación de esta pequeña aplicación de escritorio.
Este documento describe los controles comunes de Visual Basic, incluyendo botones, casillas de verificación, listas desplegables, barras de progreso, botones de opción, cuadros de texto enriquecidos y otros. Cada control tiene propiedades y métodos específicos que permiten personalizar su apariencia y comportamiento para facilitar el desarrollo de aplicaciones.
Este documento presenta las instrucciones para crear formularios y objetos en Visual Studio .NET utilizando C# para un sistema de ventas. Incluye instrucciones para crear un formulario de acceso y actualización de datos en modo conectado, un formulario de inicio de sesión, y un formulario principal MDI. El objetivo es crear la interfaz gráfica básica del sistema utilizando plantillas, controles y código para proporcionar funcionalidad.
El documento describe tres formas de conectarse a bases de datos en Visual Basic 2010: conectarse a SQL Server usando SqlClient, conectarse a una base de datos de Access usando OLE DB, y conectarse a una base de datos a través de un origen de datos ODBC. Se proporciona código de ejemplo para cada uno que muestra cómo crear una conexión, un adaptador de datos y llenar un conjunto de datos con los resultados de una consulta.
Este documento describe los pasos para crear una aplicación en NetBeans que permita acceder a una base de datos MySQL. Estos pasos incluyen: 1) crear un nuevo proyecto Java en NetBeans, 2) agregar la biblioteca JDBC de MySQL, 3) conectarse a la base de datos MySQL mediante la creación de una conexión, y 4) desarrollar una interfaz gráfica que muestre los datos de una tabla en la base de datos al cargarla y mostrarla en listas.
Este documento explica cómo añadir y configurar controles en formularios de VB.NET. Describe los pasos para agregar botones, etiquetas y cuadros de texto y configurar sus propiedades como el texto, color y eventos. También explica cómo configurar la cuadrícula del diseñador para posicionar controles con precisión y cómo crear manipuladores de eventos para responder a interacciones del usuario.
1. El documento proporciona 61 ejercicios sobre el uso de jQuery para manipular elementos HTML de diferentes maneras, como ocultar, mostrar y modificar elementos, añadir y quitar clases CSS, y manejar eventos como clicks de botones. Los ejercicios cubren una variedad de selectores, métodos y funciones de jQuery.
El documento describe los diferentes controles de diseño de interfaz de usuario en Visual Basic, incluyendo sus propiedades y eventos. Explica que el formulario es el primer objeto que se visualiza y constituye la ventana principal, y que los otros controles como etiquetas y botones se colocan en él. Luego detalla las características y funcionalidad de controles específicos como TabControl, Panel, GroupBox, FlowLayoutPanel y SplitContainer.
Este documento describe las propiedades, eventos y métodos de los formularios y contenedores en Visual Basic. Explica que los formularios son la ventana principal donde se colocan otros controles y que tienen propiedades como nombre, color de fondo y estilo de borde. También cubre eventos como Load, Click y Closing. Además, describe varios controles contenedores como TabControl, Panel, GroupBox y sus propiedades y eventos. Finalmente, explica métodos como AddObject y Drag.
Este documento describe los formularios MDI y cómo crearlos en Visual Basic. Los formularios MDI son formularios contenedores que pueden alojar otros formularios secundarios. Un proyecto solo puede tener un formulario MDI principal que actúa como contenedor, mientras que puede tener múltiples formularios secundarios. Los menús se pueden agregar al formulario MDI principal y aparecerán en la barra de menús de todos los formularios secundarios.
Aplica los fundamentos de programacion webmiguel9728
La Web fue creada en 1989 por Tim Berners-Lee en el CERN. Es un sistema de distribución de información basado en hipertexto e hipermedios accesibles a través de Internet. Un sitio web es una colección de páginas web relacionadas bajo un dominio, y una página web es un documento HTML/XHTML accesible a través de HTTP. El HTML se utiliza para describir la estructura y la información de las páginas web mediante etiquetas.
El documento proporciona instrucciones sobre cómo instalar e implementar JasperReports y el plugin iReport en NetBeans para generar informes dinámicos. Explica cómo agregar librerías, crear datos fuente, diseñar reportes, agregar parámetros y ejecutar reportes desde una aplicación Java.
Este documento describe tres ejemplos de conexiones ADO.Net a una base de datos SQL. El primer ejemplo muestra una conexión a nivel de formulario. El segundo ejemplo demuestra una conexión a nivel de proyecto utilizando una variable pública y procedimientos. El tercer ejemplo es similar pero controla errores mediante excepciones.
Este documento describe los conceptos básicos de la programación orientada a objetos en Visual Basic 6.0, incluyendo objetos, propiedades, eventos, controles, formularios y más. Explica que los objetos son elementos visuales en pantalla como botones y cajas de texto, que tienen propiedades como tamaño y texto, y que responden a eventos del usuario. También describe la diferencia entre el modo de diseño y modo de ejecución de una aplicación en Visual Basic.
Este documento explica cómo conectar una aplicación desarrollada en Visual Basic .NET con una base de datos SQL Server 2008. Se detallan 14 pasos para establecer la conexión entre el lenguaje de programación y la base de datos, y desarrollar una interfaz gráfica para interactuar con la información almacenada. El objetivo es que los estudiantes aprendan a crear aplicaciones .NET que puedan acceder y modificar datos en SQL Server.
1) El documento describe los pasos para conectar una base de datos Access y SQL a un programa en Visual Basic, incluyendo configurar el controlador ODBC, establecer la cadena de conexión, y seleccionar los campos. 2) También explica cómo crear una aplicación gráfica en Visual Basic que se conecta a la base de datos SQL, agregando controles, escribiendo código, y programando los botones. 3) Finalmente, detalla cómo conectar una base de datos MySQL a Visual Basic mediante el uso de la librería MySQL Connector .NET.
Este documento describe la herencia visual de formularios en .NET. Explica que la herencia visual permite derivar un formulario de otro formulario base, heredando sus propiedades y comportamientos. Detalla cómo crear un formulario heredado en el diseñador y cómo los eventos y métodos se ejecutan tanto en el formulario base como en el derivado. Finalmente, presenta un ejemplo práctico de un formulario base que devuelve datos y un formulario heredado que los muestra en una grilla, demostrando la reutilización de código a través de la her
Este documento presenta información sobre el desarrollo de aplicaciones móviles utilizando sensores. Explica cómo implementar una base de datos SQLite en Xamarin y describe los pasos para crear funciones básicas como registro, inicio de sesión y consulta de datos almacenados. También incluye detalles sobre el uso de sensores como la cámara en dispositivos móviles.
Este documento presenta una introducción a las inyecciones SQL y técnicas básicas para llevarlas a cabo. Explica qué es una inyección SQL, el lenguaje SQL y cómo evitarlas. Luego describe consultas SQL básicas como SELECT, INSERT, DELETE, UPDATE y DESCRIBE. Finalmente, muestra cómo salir de las variables de consulta y realizar inyecciones utilizando datos alfanuméricos y numéricos.
Este documento describe los conceptos básicos de la programación orientada a objetos como la abstracción, encapsulación, herencia y polimorfismo. Explica cómo crear una clase Empleado en Visual Basic .NET para modelar los procesos de un empleado dentro de una aplicación de gestión empresarial utilizando una perspectiva orientada a objetos.
Este documento describe los fundamentos de Visual Basic 6.0, incluyendo su entorno de trabajo, características, ventajas, y objetos intrínsecos comunes como etiquetas y cuadros de texto. Explica conceptos clave como propiedades, métodos, eventos y variables, así como operadores comunes. Finalmente, proporciona ejemplos de propiedades básicas para diferentes objetos como nombre, título, color de fondo y color de texto.
Este documento proporciona una introducción al entorno de desarrollo Visual Basic 6.0, explicando cómo crear un nuevo proyecto, los componentes principales de la interfaz como barras de menú, herramientas y ventanas, y conceptos básicos como objetos, eventos, propiedades, variables, funciones y procedimientos.
Este documento describe los pasos para conectar una base de datos de Microsoft Access y Microsoft SQL Server a un programa en Visual Basic, así como los pasos para crear una aplicación gráfica que se conecte a una base de datos MySQL. Primero se explica cómo conectar una base de datos de Access mediante un controlador OLE DB y seleccionando los campos correspondientes. Luego se detallan los pasos para conectar a SQL Server a través de SQL Server Management Studio. Finalmente, se indican los pasos para importar la librería MySQL.Data.dll, establecer la conexión a
Este documento describe las aplicaciones ASP (Active Server Pages), una tecnología de Microsoft para crear páginas web dinámicas mediante scripts ejecutados en el servidor. Explica objetos integrados como Session y Application que permiten almacenar datos entre páginas y usuarios, y cómo conectar ASP a bases de datos SQL para realizar consultas. También advierte sobre los riesgos de inyección SQL si los datos de usuario no se sanitizan adecuadamente en las consultas.
El documento describe los pasos para conectar una base de datos de Microsoft Access, Microsoft SQL Server 2008 y MySQL a Visual Basic 6.0. Explica cómo crear la base de datos, establecer la conexión, y desarrollar la interfaz gráfica para interactuar con los datos. El proceso involucra el uso de controles OLEDB, procedimientos almacenados y librerías como MySql.Data para establecer la conexión y consultar la base de datos.
El documento describe el entorno de trabajo de Visual Basic, incluyendo dos modos de trabajo: diseño y ejecución. El modo diseño permite crear la interfaz gráfica visual mediante formularios y controles. El modo ejecución es donde se escribe el código del programa. El documento también explica conceptos como objetos, propiedades, métodos, eventos y comentarios.
Este documento proporciona instrucciones para crear un formulario de inicio de sesión básico en Visual Basic. Explica cómo crear una tabla de usuarios en una base de datos, agregar formularios para el inicio de sesión y la página principal, y escribir código para validar las credenciales de inicio de sesión contra la base de datos y permitir el acceso. También incluye ejemplos de código para inicios de sesión simples y para múltiples usuarios, así como enlaces a recursos adicionales.
Este documento describe el uso de atributos de datos en HTML5 para almacenar información adicional sobre elementos. Los atributos data-* permiten almacenar datos sin necesidad de usar atributos no estándar o propiedades adicionales en el DOM. Se puede acceder a estos datos desde JavaScript usando el objeto dataset y desde CSS usando selectores de atributos o la función attr.
Este documento presenta información sobre macros en Microsoft Excel. Explica cómo crear, ejecutar y eliminar macros, y su relación con Visual Basic para Aplicaciones. También define conceptos como macros, funciones SI, MAX, MIN y tablas de ejemplo.
Ejercicio de automatizacion IntelliJ+reporte.docxssuser2e6b96
El documento describe los pasos para crear un proyecto de automatización de pruebas en IntelliJ con Gradle. Incluye la estructura del proyecto con paquetes para la lógica de negocio, pruebas y pasos, y explica cómo crear clases de página, pasos y ejecutar las pruebas para generar un informe.
Este documento presenta una introducción a la programación orientada a objetos en Power Builder. Explica conceptos clave como encapsulamiento, herencia y polimorfismo. También describe los principales objetos como aplicación, ventana y ventana de datos, así como controles, consultas, estructuras y librerías. Finalmente, detalla los pasos para iniciar una aplicación y desarrollar una ventana básica de identificación de usuario.
Este documento explica cómo crear una aplicación básica en ASP.NET MVC 3 usando Razor para gestionar una lista de clientes. Describe la estructura del proyecto MVC, la creación de un modelo de datos, un controlador y vistas. Se genera una base de datos, listado y funcionalidad básica de crear/editar/eliminar clientes para explicar conceptos básicos de MVC.
Este documento habla sobre macros en Microsoft Excel. Explica cómo crear macros usando el grabador de macros, cómo ejecutar macros, y define conceptos clave como qué es una macro y su relación con Visual Basic. También cubre temas como asignar macros a botones, eliminar macros, y diferentes funciones como SI, PROMEDIO y MAX.
Este documento presenta un resumen básico del framework Struts. Explica que Struts implementa el patrón MVC en Java y cómo funciona en aplicaciones web mediante solicitudes del navegador al controlador. También describe cómo Struts simplifica el desarrollo MVC separando la lógica del negocio, la vista y el controlador. El documento luego resume los componentes clave de Struts como el modelo, la vista y el controlador.
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y ValidacionesDidier Granados
El documento describe los métodos HTTP, los elementos que componen los formularios HTML como cajas de texto, contraseñas, casillas de verificación, botones de selección, entre otros. Explica que los formularios permiten que los visitantes envíen información al servidor y crean interacción. También cubre temas como la estructura básica de HTML, el DOM y cómo acceder y manipular los objetos de formulario a través de sus propiedades, métodos y eventos.
Este documento proporciona instrucciones paso a paso para crear una aplicación para Windows Phone 8 utilizando Visual Studio 2013. Explica cómo agregar imágenes, diseñar la interfaz de usuario con XAML, agregar navegación entre páginas y funcionalidad para establecer imágenes como pantalla de bloqueo. El tutorial guía al lector a través de la estructura básica de la aplicación, el diseño de la interfaz de usuario y la adición de funcionalidad clave.
para programadores y desarrolladores de inteligencia artificial y machine learning, como se automatiza una cadena de valor o cadena de valor gracias a la teoría por Manuel Diaz @manuelmakemoney
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaAMADO SALVADOR
Descubre el catálogo general de la gama de productos de refrigeración del fabricante de electrodomésticos Miele, presentado por Amado Salvador distribuidor oficial Miele en Valencia. Como distribuidor oficial de electrodomésticos Miele, Amado Salvador ofrece una amplia selección de refrigeradores, congeladores y soluciones de refrigeración de alta calidad, resistencia y diseño superior de esta marca.
La gama de productos de Miele se caracteriza por su innovación tecnológica y eficiencia energética, garantizando que cada electrodoméstico no solo cumpla con las expectativas, sino que las supere. Los refrigeradores Miele están diseñados para ofrecer un rendimiento óptimo y una conservación perfecta de los alimentos, con características avanzadas como la tecnología de enfriamiento Dynamic Cooling, sistemas de almacenamiento flexible y acabados premium.
En este catálogo, encontrarás detalles sobre los distintos modelos de refrigeradores y congeladores Miele, incluyendo sus especificaciones técnicas, características destacadas y beneficios para el usuario. Amado Salvador, como distribuidor oficial de electrodomésticos Miele, garantiza que todos los productos cumplen con los más altos estándares de calidad y durabilidad.
Explora el catálogo completo y encuentra el refrigerador Miele perfecto para tu hogar con Amado Salvador, el distribuidor oficial de electrodomésticos Miele.
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)AbrahamCastillo42
Power point, diseñado por estudiantes de ciclo 1 arquitectura de plataformas, esta con la finalidad de dar a conocer el componente hardware llamado tarjeta de video..
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)codesiret
Los protocolos son conjuntos de
normas para formatos de mensaje y
procedimientos que permiten a las
máquinas y los programas de aplicación
intercambiar información.
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...AMADO SALVADOR
Descarga el Catálogo General de Tarifas 2024 de Vaillant, líder en tecnología para calefacción, ventilación y energía solar térmica y fotovoltaica. En Amado Salvador, como distribuidor oficial de Vaillant, te ofrecemos una amplia gama de productos de alta calidad y diseño innovador para tus proyectos de climatización y energía.
Descubre nuestra selección de productos Vaillant, incluyendo bombas de calor altamente eficientes, fancoils de última generación, sistemas de ventilación de alto rendimiento y soluciones de energía solar fotovoltaica y térmica para un rendimiento óptimo y sostenible. El catálogo de Vaillant 2024 presenta una variedad de opciones en calderas de condensación que garantizan eficiencia energética y durabilidad.
Con Vaillant, obtienes más que productos de climatización: control avanzado y conectividad para una gestión inteligente del sistema, acumuladores de agua caliente de gran capacidad y sistemas de aire acondicionado para un confort total. Confía en la fiabilidad de Amado Salvador como distribuidor oficial de Vaillant, y en la resistencia de los productos Vaillant, respaldados por años de experiencia e innovación en el sector.
En Amado Salvador, distribuidor oficial de Vaillant en Valencia, no solo proporcionamos productos de calidad, sino también servicios especializados para profesionales, asegurando que tus proyectos cuenten con el mejor soporte técnico y asesoramiento. Descarga nuestro catálogo y descubre por qué Vaillant es la elección preferida para proyectos de climatización y energía en Amado Salvador.
SOPRA STERIA presenta una aplicació destinada a persones amb discapacitat intel·lectual que busca millorar la seva integració laboral i digital. Permet crear currículums de manera senzilla i intuitiva, facilitant així la seva participació en el mercat laboral i la seva independència econòmica. Aquesta iniciativa no només aborda la bretxa digital, sinó que també contribueix a reduir la desigualtat proporcionant eines accessibles i inclusives. A més, "inCV" està alineat amb els Objectius de Desenvolupament Sostenible de l'Agenda 2030, especialment els relacionats amb el treball decent i la reducció de desigualtats.
La inteligencia artificial sigue evolucionando rápidamente, prometiendo transformar múltiples aspectos de la sociedad mientras plantea importantes cuestiones que requieren una cuidadosa consideración y regulación.
1. Seguridad en Access 1
Páginas de este artículo: 1 2 3
Seguridad En Microsoft Access 2,003
Introducción
A menudo las personas se preguntan acerca de la implementación de técnicas para asegurarsus
bases de datos, de cómo impedirel ingreso de usuarios a sus códigos, objetos y datos, en este
artículo intentaré aclarar algunas de esas dudas.
Hay que tomar nota que las técnicas que aquí veremos son las que nos ofrece Access.
Existen muchas otras técnicas de seguridadque se han inventado usuarios creativos,si tu
conoces de programación VBA seguramente te puedes inventar algunas, pero estas no las
tocaremos, nos enfocaremos en las técnicas dadas por Access.
Lo interesante de este artículo es que veremos los temas desde estos puntos:
- Explicación resumida del tema
- Aplicación del tema de forma manual, tipo usuario
- Aplicación del tema con código,tipo programador
- Aplicación y reversión
Abordaremos las diferentes técnicas desde las más sencillas hasta las más seguras,solo hay que
tener claro queninguna técnica es 100%segura. Entre las técnicas de seguridad que
abarcaremos están:
Índice
1. Ocultar objetos
1.1. Atributo oculto de los objetos
1.2. Activar el atributo de oculto en un objeto
1.3. MostrarObjetos con el atributo de oculto activado
2. Propiedades de inicio de la base de datos
2.1. Una Propiedad especial, AllowByPassKey
3. Macro AutoExec
4. Codificar û Descodificar las bases de datos
5. Automatización de bases de datos
5.1. ¿Qué es automatización?
5.2. Automatizando una base de datos
6. Poner contraseña al código VBA
7 . Convertir las bases de datos a formato MDE
8. Poner una contraseña general de apertura
8.1. Abrir una base de datos con contraseña
8.2. Automatizar una base de datos con contraseña
9. Seguridad por usuarios
9.1. ¿Que es?
9.2. ¿Cómo funciona?
9.3. ¿Qué son los Usuarios y los Grupos de Usuarios?
9.4. Algo Más...
9.5. Activar La Seguridad Por Usuarios A Una Base De Datos
9.6. Programando
9.7 . Grupos de trabajo,Grupos, Usuarios y Contraseñas
9.8. Objetos De La Base De Datos Y Permisos
9.9. Permisos Específicos
9.10. Casos Especiales De Permisos
9.11.Verificar Si Un Usuario Tiene Un Permiso
9.12. Propietario De Los Objetos (Owner)
9.13. Funciones útiles
9.14. ¿Cómo puedo Abrir Una Base De Datos Definida Con Seguridad Por Usuarios?
9.15. ¿Cómo valida Access los permisos?
9.16. ¿Cómo Puedo Quitarle La Seguridad Por Usuarios A Una Base de Datos?
2. 9.18 Consultas Con Acceso De Propietario (With OwnerAccess Option)
9.17.Para Finalizar
1. Ocultar Objetos
1.1. Atributo Oculto de los Objetos
Todos los objetos cuentan con el atributo de oculto, el cual se encuentra desactivado
predeterminadamente, al activarlo el objeto se hace invisible en la ventana de base de datos,que
es la ventana que siempre vemos de fondo.
Este atributo funcionade la mano de una de las opciones de la base de datos "Mostrar objetos
ocultos", cuando esta opción está en Falso todos los objetos con el atributo activado se hacen
invisibles, por el contrario, con la opción de "Mostrar objetos ocultos"en Verdadero se pueden
observartodos los objetos,los cuales pueden verse de un color tenue
1.2. Activar el Atributo de Oculto En Un Objeto
Para aplicar este atributo manualmente le damos un clic secundario sobreel objeto que nos
interesa (tabla, consulta, reporte, formulario, macro ó módulo),se nos desplegará el menú
contextual, allí hacemos clic en "Propiedades", donde se nos abrirá un formulario, en el
podemos ver un Check para activar el atributo de "Oculto". De la misma manera podemos
revertir el proceso, solo desactivando el Check mencionado
¿Cómo lo realizamos por código?
Imaginemos quetenemos una tabla llamada "Clientes", para aplicarlo:
Application.SetHiddenAttribute acTable,"Clientes", True
Para quitarlo:
Application.SetHiddenAttribute acTable,"Clientes", False
-Byron, ¿Como podría hacersi quisiera aplicarle el atributo a todas las tablas ó a todos los
formularios?
Ok, usa este procedimiento con el que puedes aplicar el atributo a los objetos por colecciones
completas:
Sub AplicarAtributoOculto(intTipoObjeto As AcObjectType, _
ByVal Ocultar As Boolean, _
Optional ByVal strFormularioEjecucion As String = "")
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
'Objetivo:Aplicar/Quitar el atributo Oculto de TODOS los objetos de un tipo de objeto específico
'
'Parámetros
'intTipoObjeto:Tipo de objeto que deseamos modificar (se modifica toda la colección de ese
tipo)
'Ocultar: True para aplicar el atributo Oculto, False para quitarlo
'strFormularioEjecucion:Si corremos este procedimiento para modificar formularios,
seguramente_
estaremos operando desde un formulario, este formulario no _
puede ser modificado porque se encuentraabierto y nos genera error, _
entonces, en este parámetro le pasamos el nombrede este formulario _
para pasarlo por alto
Dim strFiltroName As String
Dim strFiltroType As String
Dim strSQL As String
Dim rst As DAO.Recordset
'Definir filtros...
3. 'para el nombre, pasarpor alto objetos de sistema, temporales y el formulario de ejecución
IfstrFormularioEjecucion < > "" And intTipoObjeto = acForm Then
strFiltroName= "(Name Not Like '~TMP*' And Name Not Like '" & strFormularioEjecucion
& "')"
Else
strFiltroName= "(Name Not Like 'Msys*' And Name Not Like '~sq_*' And Name Not Like
'~TMP*')"
End If
'para el tipo de objeto
Select Case intTipoObjeto
Case acTable:strFiltroType= "(Type=1 Or Type=4)"
Case acQuery:strFiltroType = "Type=5"
Case acForm:strFiltroType = "Type=-32768"
Case acReport:strFiltroType = "Type=-32764"
Case acMacro:strFiltroType= "Type=-32766"
Case acModule:strFiltroType = "Type=-32761"
Case Else: Exit Sub
End Select
strSQL = "Select Name From MsysObjects Where "& strFiltroName&" And " & strFiltroType
& ";"
Set rst = CurrentDb.OpenRecordset(strSQL)
IfNot (rst.BOF And rst.EOF) Then
rst.MoveLast
rst.MoveFirst
While Not rst.EOF
Application.SetHiddenAttribute intTipoObjeto,rst!Name, Ocultar
rst.MoveNext
Wend
End If
rst.Close
Set rst = Nothing
End Sub
1.3. Mostrar Objetos con el atributo de OcultoActivado
Para ver ó no ver los objetos ocultos vamos al menú:
Herramientas/Opciones/Pestaña Ver/Activar-Desactivar la casilla "Objetos ocultos"
Por código, para mostrar los objetos ocultos:
Application.SetOption "Show Hidden Objects", True
Para no mostrarlos:
Application.SetOption "Show Hidden Objects", False
Como se puede observar,cualquier usuario con acceso a la barra de menú puede mostrar los
objetos con atributo de oculto activado
2. Propiedades de inicio de la base de datos
Las propiedades de inicio nos dan una serie de opciones,las cuales se ejecutan en el momento
de la apertura de la aplicación. Para verlas/modificarlas vamos al menú:
Herramientas/Inicio...
Realmente aquí no hay mucho que decirsobre su funcionamiento porqueel nombreó título que
tienen nos deja saber de que se trata cada una (Favorde ir al cuadro de diálogo de las
propiedades de inicio y ver cuales existen).
Lo útil aquí es que se puede jugar con las opciones para limitaral usuario a realizarciertas
cosas, como usar solo las barras de menús ó de herramientas que nosotros hemos creado,
4. podemos poner un formulario que se abra al inicio,en el cual podemos agregarun evento "Al
abrir"ó "Al Cargar"donde hagamos todas las validaciones quecreamos convenientes, como la
existencia de archivos necesarios, verificarfechas, usuarios, versiones, etc.Si creemos
conveniente, en este formulario podemos salir de la aplicación si no se cumple alguna
validación, como algún archivo que sea necesario para el buen funcionamiento.
Otro ejemplo, si pulsas las teclas Ctrl+Qse abre la ventana del código VBA,con lo que cualquier
usuario puede verel código, pero desactivando las teclas especiales ya no se puede usar
combinaciones de teclas como esta.
Las limitaciones que se pongan a los usuarios dependen de cómo hemos planteado nuestra
aplicación.
-¿Byron, y por código como se hacen las modificaciones?
Antes de ver el código debemos aclarar unos puntos:
Si abrimos el cuadro de diálogo de propiedades de inicio podemos vertodas las propiedades,
pero no significa que existan. En una base de datos nueva estas propiedades no existen, cada
propiedad es creada la primera vez que le realizamos una modificación.
Las propiedades de tipo Boolean al ser creadas se quedan allí y podemos consultaró cambiar su
valor en cualquier momento
Las propiedades de tipo String, son creadas ó eliminadas, no se mantienen grabadas en la base
de datos
Tomemos por ejemplo la opción "Mostrar formulario/página"(que como mencionamos antes se
trata del formulario que se abrirá al iniciar la aplicación), inicialmenteen el cuadro de diálogo
de Inicio aparece"(Ninguno)", pero esto no quiere decir queeste nombreesté guardado en esta
propiedad, aquí realmente lo que pasa es que esta propiedadNO existe en la base de datos. Si
cambiamos este nombrepor el de algún formulario existente, lo que hace Access es que crea
dicha propiedad y le agrega el nombredel formulario. Si después volvemosa escoger la opción
"(Ninguno)", lo que hace Access es que elimina la propiedad, ojo aquí, Access no le cambia el
nombre, elimina la propiedad.
Entonces, para cambiaruna propiedadpor código primero debemos revisar por su existencia;Si
encontramos que Sí existe, solo le cambiamos el valor, si encontramos que No existedebemos
crearla
Con el siguiente procedimiento podemos cambiarel valor de cualquier propiedad, si la
propiedad no existe se creará:
Sub CambiarPropiedadInicio(ByVal NombrePropiedad As String, _
ByVal TipoValor As Variant, _
ByVal NuevoValorAs Variant)
'TipoValor:Boolean = DB_BOOLEAN, String = DB_TEXT
On Error GoTo Error_Procedimiento
Dim db As DAO.Database
Dim prp As DAO.Property
Set db = CurrentDb
db.Properties(NombrePropiedad) = NuevoValor
Salir:
Set prp = Nothing
Set db = Nothing
Exit Sub
Error_Procedimiento:
IfErr.Number = 3270 Then
'Propiedad no encontrada, creamos la propiedad
Set prp = db.CreateProperty(NombrePropiedad,TipoValor,NuevoValor)
db.Properties.Append prp
Resume Next
Else
'Error desconocido
MsgBox Err.Description, vbCritical, "Error número:"& Err.Number
Resume Salir
End If
5. End Sub
Ejemplo de uso:
Para cambiar la propiedad "Mostrar ventana Base de datos"que es tipo Boolean:
CambiarPropiedadInicio "StartupShowDBWindow", DB_Boolean, False
Ahora cambiemos la propiedad "Mostrar formulario o página", que es tipo String:
CambiarPropiedadInicio "StartupForm", DB_Text, "Nombre del formulario"
Como se puede observar,los nombres de las propiedades están en ingles. A continuación te
pongo la lista de propiedades y el tipo de dato que tienen:
Título aplicación:AppTitle(String)
Icono aplicación:AppIcon (String)
Mostrar formulario o página:StartupForm (String)
Mostrar ventana Base de datos:StartupShowDBWindow (Boolean)
Mostrar barra de estado:StartupShowStatusBar (Boolean)
Barra de menús:StartupMenuBar (String)
Barra de menús contextuales:StartupShortcutMenuBar (String)
Permitir menús completos. AllowFullMenus (Boolean)
Permitir menús contextuales predeterminados:AllowShortcutMenus (Boolean)
Permitir barras de herramientas incorporadas:AllowBuiltInToolbars (Boolean)
Permitir cambios de barras de herramientas/menús:AllowToolbarChanges
Permitir examinar código después de un error:AllowBreakIntoCode (Boolean)
Usar teclas especiales de Access:AllowSpecialKeys (Boolean)
Como mencionamos anteriormente,las propiedades de tipo String existen ó no Existen.Si
tenemos definido un formulario de inicio, pero yano queremos ninguno, lo que tenemos que
hacer es eliminar la propiedad:
Dim db As DAO.Database
Set db = CurrentDb
db.Properties.Delete "StartupForm"
Set db = Nothing
Pero claro, antes de eliminar una propiedad sería bueno revisar si existe. Aquí te pongo una
función para averiguarlo:
Function ExistePropiedadInicio(ByVal NombrePropiedad As String) As Boolean
'Byron Contreras - byronlcl@gmail.com - 2009
'.............................................
Dim db As DAO.Database
Dim prp As Property
On Error Resume Next
Set db = CurrentDb
Set prp = db.Properties(NombrePropiedad)
IfErr.Number = 0 Then
ExistePropiedadInicio = True
Else
Err.Clear
End If
Set db = Nothing
End Function
Entonces tendríamos:
Dim db As DAO.Database
Dim strPropiedad as String
6. Set db = CurrentDb
strPropiedad = "StartupForm"
IfExistePropiedadInicio(strPropiedad) Then db.Properties.Delete"StartupForm"
Set db = Nothing
2.1 Una Propiedad Especial,AllowByPassKey
¿Por qué es especial?, porque si abres el cuadro de diálogo de propiedades de inicio puedes ver
que no se encuentra incluida.¿Por qué no está incluida?Pregúntale a Microsoft... puede ser que
se les haya olvidado.
Pero veamos que hace:
Como recordarás, en la propiedad "Mostrar formulario o página"(StarUpForm) podemos
definir un formulario que se abra al inicio, este formulario puedes utilizarlo para realizar
validaciones y si no te convence lo que encuentras puedes salir de la aplicación.
Existe una forma de saltarse este formulario, es decir, que la aplicació n se abra y el formulario
de inicio no se abra. Para hacer esto, solo debes mantener presionada la tecla Shift y abrir el
archivo, esto funciona así predeterminadamente.
Para cambiar este comportamiento tenemos la propiedad "Permitir tecla Shift de inicio" /
"AllowByPassKey", de tipo Boolean. Si la propiedad se encuentra en True, se puedeabrir la
aplicación con la tecla Shift y saltarse el formulario de inicio, si la propiedad está en False, el
formulario de inicio siempre se abrirá.
Para cambiar el valor por código podemos usar la misma función de arriba:
CambiarPropiedadInicio "AllowByPassKey", DB_Boolean, False
CambiarPropiedadInicio "AllowByPassKey", DB_Boolean, True
Un Tip Adicional:
Si has desactivado la propiedad "Mostrar ventana Base de datos"(StartupShowDBWindow), y
ya estas dentro de la aplicación y deseasverla ventana de base de datos, solo pulsa la tecla F11
para que aparezca. Si sales de la aplicación y vuelves a entrar,estará oculta de nuevo.
3. Macro AutoExec
Si creas una macro y le pones como nombre"AutoExec", esta se ejecutará al inicio,cuando tu
aplicación se abre.Esta macro también puedes utilizarlapara realizar configuraciones ó
validaciones iniciales, similar al formulario de inicio.
Esta macro también puede sersaltada si se tiene presionada la tecla Shift al abrir tu aplicación,
pero también puedes cambiar este comportamiento cambiando la propiedad de inicio "Permitir
tecla Shift de inicio"("AllowByPassKey"), como se explica en el capítulo anterior.
4. Codificar û Descodificar Las Bases De Datos
Una base de datos puede ser abierta por un Procesador de palabras, como el Block de Notas ó
Word, al hacerlo se puede observartodo el código insertado.
Para evitar esto debescodificar tu base de datos, el procesador de palabras aún puede abrir el
archivo pero ya no se podrá entender nada.
Hay que tomar nota que aunque una base de datos esté codificada, cualquierusuario puede
abrir el archivo normalmente con Access. Este método debe ser usado conjuntamente con otras
técnicas de seguridad.
Para codificar ó descodificar debes ir al menú:
Herramientas/Seguridad/Codificaró descodificarla base de datos...
Por código tienes:
DoCmd.RunCommand acCmdEncryptDecryptDatabase
Pero por código da error y no deja realizar el proceso, así que no lo uses.
7. 5. Automatización De Bases De Datos
5.1 ¿Que es automatización?
Es el proceso con el cual podemos abrir un archivo de base de datos porcódigo, y de esta
manera podemos tener acceso a todos sus objetos, propiedades, métodos, etc.
Con la automatización podemos realizaroperaciones que nos facilitan el trabajo al usar bases de
datos externas, pero a la vez, como se tiene acceso a todo, se pueden crearó anular algunas de
las técnicas de seguridad.
5.2 AutomatizandoUna Base De Datos
Veamos como podemos abrirlas bases de datos para automatizarlas:
Creando el objeto de aplicación (Access):
Sub ObjApl_AbrirBD()
'Byron Contreras - byronlcl@gmail.com - 2009
'.............................................
On Error GoTo Err_Procedimiento
Dim strArchivoMDBAs String
Dim aplAccess As Access.Application
strArchivoMDB = "Ruta completa del archivo .mdb"
Set aplAccess = New Access.Application
aplAccess.OpenCurrentDatabase strArchivoMDB, False
MsgBox aplAccess.CurrentDb.Name
aplAccess.CloseCurrentDatabase
aplAccess.Quit
Salir_Procedimiento:
Set aplAccess = Nothing
Exit Sub
Err_Procedimiento:
MsgBox Err.Description,vbCritical, "Error número "& Err.Number
Resume Salir_Procedimiento
End Sub
Por el método CreateObject:
Sub CreObj_AbrirBD()
'Byron Contreras - byronlcl@gmail.com - 2009
'.............................................
On Error GoTo Err_Procedimiento
Dim strArchivoMDBAs String
Dim aplAccess As Access.Application
strArchivoMDB = "Ruta completa del archivo .mdb"
Set aplAccess = CreateObject("Access.Application")
aplAccess.OpenCurrentDatabase strArchivoMDB, False
aplAccess.CloseCurrentDatabase
aplAccess.Quit
Salir_Procedimiento:
Set aplAccess = Nothing
Exit Sub
8. Err_Procedimiento:
MsgBox Err.Description,vbCritical, "Error número "& Err.Number
Resume Salir_Procedimiento
End Sub
Por el método GetObject:
Sub GetObj_AbrirBD()
'Byron Contreras - byronlcl@gmail.com - 2009
'.............................................
On Error GoTo Err_Procedimiento
Dim strArchivoMDBAs String
Dim aplAccess As Access.Application
strArchivoMDB = ""Ruta completa del archivo .mdb"
Set aplAccess = GetObject(strArchivoMDB)
MsgBox aplAccess.CurrentDb.Name
aplAccess.CloseCurrentDatabase
aplAccess.Quit
Salir_Procedimiento:
Set aplAccess = Nothing
Exit Sub
Err_Procedimiento:
MsgBox Err.Description,vbCritical, "Error número "& Err.Number
Resume Salir_Procedimiento
End Sub
Por Shell:
Sub Shell_AbrirBD()
'Byron Contreras - byronlcl@gmail.com - 2009
'.............................................
On Error GoTo Err_Procedimiento
Dim strArchivoEXEAs String
Dim strArchivoMDBAs String
Dim aplAccess As Access.Application
Dim strShell As String
'Definir datos de apertura...
'Archivo ejecutable de Microsoft Access
strArchivoEXE = SysCmd(acSysCmdAccessDir) &"MSACCESS.exe"
strArchivoMDB = "Ruta completa del archivo .mdb"
'Construir la cadena para la función Shell
strShell = """" & strArchivoEXE& """" & " " & _
"""" & strArchivoMDB& """"
'Si la función Shell tiene éxito tomamos el archivo/objeto(aplicación Access)
IfShell(strShell, vbHide) Then
'A veces el archivo tarda en abrir. Si GetObjet no lo encuentra
'nos dará error, entonces lo metemos a un bucle hasta que lo encuentre
Do
On Error Resume Next
Set aplAccess = GetObject(strArchivoMDB)
DoEvents
Loop Until Err.Number = 0
9. End If
MsgBox aplAccess.CurrentDb.Name
aplAccess.CloseCurrentDatabase
aplAccess.Quit
Salir_Procedimiento:
Set aplAccess = Nothing
Exit Sub
Err_Procedimiento:
MsgBox Err.Description,vbCritical, "Error número "& Err.Number
Resume Salir_Procedimiento
End Sub
6. Poner Contraseña Al Código VBA
Esta es una forma de protegertu código paraque no pueda ser leído, solo se podrá accedera él
introduciendo la contraseñacorrecta
Para poner la contraseña ve a la ventana VBA, luego vas al menú:
Herramientas/Propiedades de "Nombre de la aplicación"...
En el formulario que se abre, vea la página "Protección", allí podrás observarun check
"Bloquear proyecto para visualización", actívalo. Justo abajo aparecelos cuadros de texto de
"Contraseña"y "Confirmar contraseña", llénalos y listo, tu código esta protegido contra lectura.
7.Convertir Las Bases De Datos A Formato MDE
Con este método puedes protegertodo tu código VBA, al aplicarlo, Access crea una copia de t u
archivo actual .mdby convierte la copia en archivo .mde.Con esto tu código queda
empaquetado y nadie pude verlo, ni siquiera tu, es por eso que solo debes aplicar esta protección
cuando tu aplicación esteterminada,lista para distribuir.
Si después necesitas hacer cambios en tu aplicación deberás recuperar la copia original en .mdb,
realizarle los cambios pertinentes y después volver a convertir tu base de datosa .mde.
Para convertir tu base de datos vas al menú:
Herramientas/Utilidades de la bases de datos/Crear archivo MDE...
Por código debería hacersepor:
DoCmd.RunCommand acCmdMakeMDEFile
Pero por código da error y no se puedeutilizar
8. Poner Una Contraseña General De Apertura
Esta es una contraseña general, cada vez que abrimos la base de datos nos la pregunta y nunca
varía, aquí no importa que usuario esta abriendo la base de datos.
La confiabilidadde este tipo de seguridaddepende de que contraseña definamos,el número de
caracteres que pongamos y el tipo de caracteres que utilicemos.
Para establecer estacontraseñatenemos que tener abierta la base de datos en Modo Exclusivo,
si lo hacemos manualmente lo haremosdesde el menú:
Herramientas/Seguridad/Establecer contraseña para la base de datos...
Por código podemos establecerla de esta manera:
Dim db As DAO.Database
Set db = CurrentDB
db.NewPassword "NuevaContraseña", "ContraseñaAnterior"
Set db = Nothing
10. Si la base de datos no tenía contraseña establecida, en el parámetro "ContraseñaAnterior"
dejamos una cadena vacía:
db.NewPassword "NuevaContraseña", ""
Si nuestra base de datosya tiene una contraseña establecida y la queremos borrar,en el
parámetro "NuevaContraseña"dejaremos una cadena vacía:
db.NewPassword "", "ContraseñaAnterior"
8.1 Abrir Una Base De Datos Con Contraseña
Podemos abrir este tipo de base de datos utilizando el método OpenDatabase como se muestra a
continuación, los parámetros están puestos en variables dondepueden entenderse mejor:
Sub AbrirBD_Contraseña()
'Byron Contreras - byronlcl@gmail.com - 2009
'.............................................
On Error GoTo Err_Procedimiento
Dim strArchivoMDBAs String
Dim strContraseñaBDAs String
Dim blnBloquearBaseDatos As Boolean
Dim blnAbrirEnModoExclusivo As Boolean
Dim db As DAO.Database
'definir datos de apertura
strArchivoMDB = "Archivo de base de datos con extensión .mdb"
strContraseñaBD= "Contraseña de la base de datos"
blnBloquearBaseDatos = False '¿Bloquear el archivo para que no pueda accesarse?
blnAbrirEnModoExclusivo = False '¿Abrir en modo exclusivo?
'abrir la base de datos
Set db = DBEngine.OpenDatabase(strArchivoMDB, blnBloquearBaseDatos,
blnAbrirEnModoExclusivo, "MS Access;PWD=" & strContraseñaBD)
MsgBox "Número total de tablas:" & db.TableDefs.Count
db.Close
Salir_Procedimiento:
Set db = Nothing
Exit Sub
Err_Procedimiento:
MsgBox Err.Description,vbCritical, "Error número "& Err.Number
Resume Salir_Procedimiento
End Sub
Recuerda que con este método tienes acceso a los datos de tablas y consultas, o sea el
objeto Database
8.2 Automatizar Una Base De Datos Con Contraseña
Si tu intención es trabajar con los objetos de Access, formularios, informes, macros, módulos,
barras, etc.entonces necesitas obtener el objeto de la aplicación, en cuyo caso puedes crear una
nueva instancia de Microsoft Access y luego usar el método OpenCurrentDatabase para abrir la
base de datos:
Sub ObjApl_AbrirBD_Contraseña()
'Byron Contreras - byronlcl@gmail.com - 2009
'.............................................
11. On Error GoTo Err_Procedimiento
Dim strArchivoMDBAs String
Dim strContraseñaBDAs String
Dim aplAccess As Access.Application
'Definir datos de apertura...
strArchivoMDB = "Archivo de base de datos .mdb"
strContraseñaBD= "Contraseña de la base de datos"
Set aplAccess = New Access.Application
'Set appAccess = CreateObject("Access.Application") '<< también se puede así
'aplAccess.Visible = True '<< si deseas que sea visible
aplAccess.OpenCurrentDatabase strArchivoMDB, False, strContraseñaBD
MsgBox aplAccess.CurrentDb.Name
aplAccess.CloseCurrentDatabase
aplAccess.Quit
Salir_Procedimiento:
Set aplAccess = Nothing
Exit Sub
Err_Procedimiento:
MsgBox Err.Description,vbCritical, "Error número "& Err.Number
Resume Salir_Procedimiento
End Sub
9. Seguridad Por Usuarios
9.1 ¿Que Es?
Este tipo de seguridad es la más completa y confiable que nos ofrece Access.
Una base de datos cuenta con varios OBJETOS, como tablas, consultas, reportes, formularios,
macros y módulos, nosotros podemos crearUSUARIOSy ponerles una contraseña de inicio,
luego podemos asignarlespermisos a esos usuarios para utilizartodos los objetos mencionados
o solo algunos.
En la vida real no siemprenos interesa que un usuario tenga permisos completos sobre un
objeto, por citar un ejemplo, a veces necesitamos que un usuario pueda verun reporte y que
pueda imprimirlo, pero no queremos quepueda hacercambiosen el diseño. La se guridad por
usuarios nos permite eso, definir permisos específicos para cada objeto.
Los diferentes objetos tienen varios niveles de permisos, quevarían según sea el objeto. Veamos
una tabla, a esta se le pueden definir los siguientes permisos:
-Leer datos (Abrirla tabla y leer los datos)
-Insertar datos (crearnuevos registros)
-Modificar datos
-Eliminar datos (eliminar registros)
-Leer definiciones (ver la tabla en vista de diseño)
-Modificar definiciones (agregar, modificar y eliminar campos, crear índices, etc.en la vista de
diseño)
-Leer información de permisos
-Modificar permisos
A un usuario se le puede asignar solo un permiso de estos, varios permisos ó todos los permisos.
La seguridad por usuarios te permite tener a tus usuarios definidos exactamentecomo los
necesitas,a lo mejor quieres que la secretaria lea los datos de las facturas de compra, pero no
necesitas que realice cambios en los datos, ni mucho menos que los elimine.
9.2 ¿Cómo Funciona?
12. Para entenderlo debemos comprendercomo funciona Access, queaunque algunos no sabían,
trabaja todo el tiempo con Seguridad por usuarios.
Cada vez que la aplicación de Access inicia, lo primero que hace es consultar un archivo exterior
de extensión .mdw, en este archivo se encuentran guardados los nombres de usuarios y
contraseñas,a este archivo se le llama GRUPO DE TRABAJO.
Access solamente inicia con un nombrede usuario y contraseña correctos, los cuales valida en el
Grupo de trabajo (archivo exterior .mdw), luego, Access se queda conectado al Grupo de trabajo
y cada vez que intentamos realizar cualquieroperación como abrir un objeto, modificardatos,
etc. Access consulta si tenemos los permisos necesarios para realizar tal operación,si no
tenemos el permiso lógicamente no nos deja realizar la operación y nos informa.
-Byron, tu dices que Access trabaja todo el tiempo con Seguridad por usuarios, pero a mi nunca
me a pedido un nombre de usuario y contraseña...
Te doy detalles del porque:
Cuando abres por primera vez Access, se crea un archivo de Grupo de trabajo llamado
"System.mdw", este grupo de trabajo es el que usa Access predeterminadamente,cada basede
datos que has creado se conecta a él. Este archivo de grupo de trabajo contiene dos usuarios:
-Admin (Administrador)
-User (Usuario)
Estos usuarios contienen permisos totales sobretoda la base de datos, estos usuarios además
están definidos sin contraseña, es decir, con una cadena vacía "".
Cuando Access inicia,predeterminadamente se conecta al grupo de trabajo "System.mdw"y te
ingresa predeterminadamentecon el usuario "Admin"(Administrador), que como no tiene una
contraseña definida, ingresalibremente y no se detiene. La verdades que el grupo de trabajo Sí
preguntó porUsuario y contraseña, pero Access le ingreso el usuario "Admin"y de contraseña
una cadena vacía.
Mientras estas usando normalmentetu base de datos tampoco te das cuenta de que se están
manejando validaciones de permisos sobrelos objetos, esto es porquecomo dijimos antes,estas
ingresado con el usuario Admin,el cual tiene permisos totales y nunca encuentra restricciones.
Hagamos unas pruebas para corroborarlo dicho, vamos a la ventana VBA de Access, abramos la
ventana de inmediato (Ctrl+G) y escribamos esto (Copia y pega):
Debug.Print "Mi archivo de grupo de trabajo actual es:"&
Syscmd(acSysCmdGetWorkgroupFile)
Y presiona Enter, te saldrá el nombre del archivo de grupo de trabajo que estas utilizando.
Ahora escribe esto:
Debug.Print "Mi usuario actual es:"& CurrentUser()
Y presiona Enter, se mostrará el nombre del usuario actual con el que estas trabajando, con el
que Access te ha ingresado a la base de datos.
Ahora que ya tienes una idea general sobre la seguridad porusuarios, entremos en conceptos...
9.3 ¿Qué Son Los Usuarios y Los Grupos De Usuarios?
Un usuario es una persona individual definida en el grupo de trabajo, al ingresardebe
proporcionar su nombre de usuario y una contraseña, esta persona tendrá ciertos permisos para
utilizar objetos, estos permisos han sido agregados con anticipación poralgún Administrador de
seguridad de la base de datos.
La asignación de permisospara un usuario puede ser muy delicada, recordemos que hay que
especificarlepermisos para cadaobjeto existente, y para cada objeto existen varios permisos, los
cuales varían según sea el tipo de objeto.
Para ahorrar este trabajo se crearon los GRUPOS DE USUARIOS (simplementelos llamaremos
GRUPOS), tu puedes crearun nuevo Grupo y asignarleun nombre, luego le puedes asignar
permisos de la misma manera que lo harías con un usuario,la ventaja es que cuando yatienes
un grupo bien definido,al grupo le puedes agregar/ingresar usuarios y estos heredan
automáticamentetodos los permisos del grupo, luego puedes agregar, modificar ó eliminar
permisos a dicho grupo y los cambios se reflejan también en los usuarios.
Para citar un ejemplo, puedes crearun grupo llamado "Ventas"que tenga todos los permisos
para darle seguimiento a marketing, cotizaciones, pedidos y facturas. Cuando se contrate a una
13. nueva persona para el área de ventas, solo le creas un usuario en el sistema,lo agregas al grupo
"Ventas" y ya estará listo para trabajar, sin tener que estar definiendo cada vez los mismos pasos
de asignación de permisos.
Luego probablemente te interesecrear otro grupo llamado "V endedores", "Compradores",
"Supervisores", etc.
Hay que tomar nota que un usuario puede pertenecer a varios Grupos
Aunque un usuario pertenezca a uno o a varios grupos, también puedes definirle permisos
extras.
9.4 Algo Más...
Ahora que ya sabes lo que son los Grupos, te cuento queel grupo de trabajo "System.mdw"
(predeterminado) también tiene dos grupos incluidos:
-Users
-Admins
El usuario User está incluido en el grupo Users
El usuario Adminsestá incluido en el grupo Admins
El grupo Admins tiene permisoscompletos sobre toda la base de datos
-íAhora si te he entendido Byron,entonces el usuario Admin es el de mayorjerarquía porque
tiene todos los permisos y porque esta incluido en el grupo Admins!
Siento decirte queno, el usuario "Admin"no es el que tiene mayor jerarquía. Revisemos como
esta funcionando Access, hagamos estas pruebas:
Crea una nueva base de datos, ponlecualquier nombre(porquenos servirá solo para pruebas)
Esta nueva base de datos no tiene ningún objeto porque no hemos creado nada, pero vamos a
las tablas y verás que ya hay tablas creadas,si no puedes verlasve al menu:
Herramientas/Opciones/Pestaña Ver/Activarcasilla"Objetos de Sistema"
El nombre de todas estas tablas comienza por "Msys..."
Ahora, si el usuario "Admin"(con el que estas ingresado) tiene todos los permisos de la base de
datos no deberías tener ningún problema en tratar de modificaró eliminar estas tablas.Haz la
prueba, intentaeliminar cualquiera de estas tablas (seleccionala tabla y pulsa la tecla Supr)...
Exacto, nos da un mensaje que diceque no tenemos permiso para eliminar la tabla, pero,
¿Quién tiene este permiso?, hagamos otra comprobación;Dale un clic secundario a cualquiera
de estas tablas, en el menú desplegado escojamos la opción "Propiedades", allí veamos quien es
el propietario,a mi me sale que es un usuario llamado "Engine".
Veamos otra cosa, entre estas tablas existe una llamada "MSysAccessObjects", repitamos los
pasos para ver quién es el propietario, a mi me sale "Admin" ("Administrador") ó sea nosotros
en este momento. Si somos los propietarios entonces seguramente podemos hacer lo que
queramos con esa tabla,pero no es cierto, si la abrimos para leer los datos no tenemos ningún
problema, pero si intentamos eliminarla nos dice que no tenemo s permiso (haz la prueba).Esto
quiere decirque un usuario mayornos puso como propietarios de esta tabla, nos dio permiso de
lectura y nos quitó el permiso para eliminarla.
Sigamos con las pruebas:
No te preocupes si no entiendes el código a continuación, adelante lo veremos más a detalle.
Ahora, en un Módulo nuevo escribe este procedimiento (copia y pega):
Sub ListarUsuarios()
Dim usr As DAO.User
For Each usr In DBEngine.Workspaces(0).Users
Debug.Print usr.Name
Next usr
End Sub
Ve a la Ventana Inmendiato (si no esta abierta presiona Ctrl+G), escribe lo siguiente:
ListarUsuarios
Y presiona Enter, se escribirán los usuarios quetiene la base de datos,a mí me sale:
- Admin
- Creator
- Engine
14. El usuario Admin somos nosotros,los otros dos usuarios, Creatory Engine le pertenecen a
Access y no podemos hacer nada con ellos, ni modificarlos ni eliminarlos.
Hay que mencionar también que los usuarios Admin y User no pueden ser eliminados.
Si quieres ver los grupos predeterminados,escribe este nuevo procedimiento:
Sub ListarGrupos()
Dim grp As DAO.Group
For Each grp In DBEngine.Workspaces(0).Groups
Debug.Print grp.Name
Next grp
End Sub
En la ventana de inmediato escribimos:
ListarGrupos
Y hacemos Enter, se nos lista los grupos de usuarios existentes, a mí me sale:
Admins
Users
Estos dos grupos son predeterminados y tampoco se pueden eliminar.Del grupo Admins ya
hemos hablado.
Cuando creas un nuevo usuario manualmente, este automáticamentequeda ingresado en el
grupo de Users (Usuarios),si quieres que este usuario esté también en el grupo de
Administradores tendrás que ingresarlo en un paso siguiente
9.5 Activar La Seguridad Por Usuarios A Una Base De Datos
Como mencionamos antes, Access trabaja siempre con la seguridad por usuarios, quese
encuentra en un Grupo de trabajo que es un archivo externo llamado "System.mdw", cada base
de datos nueva que creemos se conecta a este archivo.
Si nosotros necesitamos agregarle a una base de datos la seguridad por usuarios, en realidad lo
que hacemos es crear un nuevo Grupo de trabajo (un archivo .mdw), luego necesitamos decirle a
Access que para abrir esta BD lo haga a través de este nuevo grupo de trabajo.
Para realizar este proceso, lo más fácil es hacerlo porel asistente, que se encuentra en el menú:
Herramientas/Seguridad/Asistente para seguridad por usuarios...
Allí seguimos todos los pasos del asistente leyendo detenidamente cada paso hasta finalizar.
Cuando se termina este proceso,Access nos da un informe de cómo quedaron las cosas y nos
permite guardar la información en otro lugarpara que pueda servirnos más adelante. Todo este
proceso lo que hacees:
-Crear un nuevo grupo de trabajo, un archivo .mdw
-Obliga a crear un nuevo usuario en el grupo de Administradores
-Al usuario Admin se le quitan todos los permisos
-Al usuario Admin se le coloca una contraseña
Con esto se logra que al iniciar Access nos lance la pantalla de ingreso donde pide usuario y
contraseña, porque como vimosanteriormente, Access inicialmente intenta ingresar con un el
usuario Admin y con una contraseña vacía,la cual encuentra que no coincide(porque ahora hay
una contraseña) y nos lanza la pantalla de ingreso
-El usuario "Admin"es sacado del grupo de "Admins"
Esto es porque el grupo Admins siempremantiene los permisos completos
-A los objetos existentes se les cambia de propietario, se les pone el nuevo usuario
administrador ingresado en el proceso
9.6 Programando
A este punto debes tener entendido todo lo dicho anteriormente sobrecomo funciona la
seguridad por usuarios, si tienes dudas por favor vuelve a leer desde el principio y cuando todo
esté claro continuas
15. Bueno, aquí viene lo bonito ya que empezaremos a ver todo lo dicho anteriormente pero con
código.
IMPORTANTE
No trabajes los usuarios y grupos de usuarios sobre el grupo de trabajo predeterminado de
Access "System.mdw", porque si haces cambios, este se reflejará sobre todas las bases de datos
que tienes y las nuevas que crees.
Crea una base de datos nueva, agrégale un nuevo grupo de trabajo como se especifica en el
punto anterior "AgregarLa Seguridad Por Usuarios A Una Base De Datos", y así solo esa base de
datos estará protegida.
En este artículo intento dar las explicaciones de cómo se realizan las operaciones manualmente
y con código. Si eres nuevo en este tema (seguridad porusuarios), te aconsejo que vallas
aprendiendo de cómo se realizan las cosas solo manualmente, porqueel código puede
confundirte. Solo cuando ya tengas experiencia manejando las cosas manualmente empieza el
aprendizaje del código
Programando...
Microsoft Access trabaja la totalidad de operaciones de seguridad a través de dos conjuntos:
- Grupos de trabajo, Grupos, Usuarios y Contraseñas
- Objetos de la base de datos y permisos
Estos conjuntos se operan de manera diferente, y los detallamos a continuación
9.7 Grupos de trabajo,Grupos,Usuarios y Contraseñas
Para administrar manualmentelos Grupos,Usuarios y contraseñas puedes ir al menú:
Herramientas/Seguridad/Cuentas de usuario y de grupo...
Pero nuestra intención es automatizarlo, así que este conjunto lo podemos trabajar con el objeto
Application.DBEngine.
Veamos como podemos establecer referencias a los objetos, para hacer referencia al grupo de
trabajo actual tenemos:
Dim ws As DAO.Workspace
Set ws = DBEngine.Workspaces(0)
Para hacer referencia a un usuario:
Dim ws As DAO.Workspace
Dim usr As DAO.User
Set ws = DBEngine.Workspaces(0)
Set usr = ws.Users("NombreUsuario")
Para hacer referencia a un grupo:
Dim ws As DAO.Workspace
Dim grp As DAO.Group
Set ws = DBEngine.Workspaces(0)
Set grp = ws.Groups("NombreGrupo")
Para hacer referencia a los usuarios quepertenecen a un grupo:
Dim ws As DAO.Workspace
Dim usrs As DAO.Users
Set ws = DBEngine.Workspaces(0)
Set usrs = ws.Groups("NombreGrupo").Users
Para hacer referencia a los grupos a los cuales perteneceun usuario:
Dim ws As DAO.Workspace
Dim grps As DAO.Groups
Set ws = DBEngine.Workspaces(0)
Set grps = ws.Users("NombreUsuario").Groups
16. Conociendo esta lógica, ahora podemos entenderlos procedimientos siguientes:
Listar los usuarios del sistema:
Sub ListarUsuarios()
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim usr As DAO.User
For Each usr In DBEngine.Workspaces(0).Users
Debug.Print usr.Name
Next usr
End Sub
Listar los grupos del sistema:
Sub ListarGrupos()
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim grp As DAO.Group
For Each grp In DBEngine.Workspaces(0).Groups
Debug.Print grp.Name
Next grp
End Sub
Listar los usuarios que pertenecen a un grupo:
Sub ListarUsuariosEnGrupo(ByVal strGrupo As String)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim usr As DAO.User
For Each usr In DBEngine.Workspaces(0).Groups(strGrupo).Users
Debug.Print usr.Name
Next usr
End Sub
Lista de grupos a los cuales pertenece un usuario:
Sub ListarGruposDeUsuario(ByVal strUsuario As String)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim grp As DAO.Group
For Each grp In DBEngine.Workspaces(0).Users(strUsuario).Groups
Debug.Print grp.Name
Next grp
End Sub
Crear un usuario:
Sub CrearUsuario(ByVal strNombreUsuario As String, _
ByVal strIdUsuario As String, _
Optional ByVal strContraseña As String = "")
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim usr As DAO.User
With DBEngine.Workspaces(0)
Set usr = .CreateUser(strNombreUsuario, strIdUsuario, strContraseña)
.Users.Appendusr
.Users.Refresh
'agregarlo al grupo Users
With .Groups("Users")
Set usr = .CreateUser(strNombreUsuario)
17. .Users.Append usr
.Users.Refresh
End With
End With
Set usr = Nothing
End Sub
Crear un grupo:
Sub CrearGrupo(ByVal strNombreGrupo As String, ByVal strIdGrupo As String)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim grp As DAO.Group
With DBEngine.Workspaces(0)
Set grp = .CreateGroup(strNombreGrupo, strIdGrupo)
.Groups.Append grp
.Groups.Refresh
End With
Set grp = Nothing
End Sub
Agregar un usuario a un grupo:
Sub AgregarUsuario_a_Grupo(ByVal strUsuario As String,ByVal strGrupo As String)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim usr As DAO.User
With DBEngine.Workspaces(0).Groups(strGrupo)
Set usr = .CreateUser(strUsuario)
.Users.Appendusr
.Users.Refresh
End With
End Sub
Eliminar un usuario definitivamente:
Sub EliminarUsuario(ByVal strUsuario As String)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
DBEngine.Workspaces(0).Users.Delete strUsuario
End Sub
Eliminar un grupo definitivamente:
Sub EliminarGrupo(ByVal strGrupo As String)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
DBEngine.Workspaces(0).Groups.Delete strGrupo
End Sub
Eliminar a un usuario de un grupo:
Sub EliminarUsuario_de_Grupo(ByVal strUsuario As String, ByVal strGrupo As String)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
DBEngine.Workspaces(0).Groups(strGrupo).Users.Delete strUsuario
End Sub
Cambiar la contraseña para un usuario:
Sub CambiarContraseña(ByVal strUsuario As String, _
18. ByVal strContraseñaAnterior As String, _
ByVal strContraseñaNueva As String)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
With DBEngine.Workspaces(0)
.Users(strUsuario).NewPassword strContraseñaAnterior, strContraseñaNueva
End With
End Sub
Determinar si existe un usuario:
Function ExisteUsuario(ByVal strUsuario As String) As Boolean
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim usr As DAO.User
On Error Resume Next
Set usr = DBEngine.Workspaces(0).Users(strUsuario)
IfErr.Number = 0 Then
ExisteUsuario = True
Else
Err.Clear
End If
Set usr = Nothing
End Function
Determinar si existe un grupo:
Function ExisteGrupo(ByVal strGrupo As String) As Boolean
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim grp As DAO.Group
On Error Resume Next
Set grp = DBEngine.Workspaces(0).Groups(strGrupo)
IfErr.Number = 0 Then
ExisteGrupo = True
Else
Err.Clear
End If
Set grp = Nothing
End Function
Determinar si un usuario pertenece a un grupo:
Function ExisteUsuarioEnGrupo(ByVal strGrupo As String, ByVal strUsuario As String) As Bool
ean
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim usr As DAO.User
On Error Resume Next
Set usr = DBEngine.Workspaces(0).Groups(strGrupo).Users(strUsuario)
IfErr.Number = 0 Then
ExisteUsuarioEnGrupo = True
Else
Err.Clear
End If
Set usr = Nothing
End Function
9.8 Objetos De La Base De Datos Y Permisos
Para administrar manualmentelos permisos de los objetos puedes ir al menú:
19. Herramientas/Seguridad/Permisos de usuario y de grupo...
Para automatizar los permisos de la base de datos podemos trabajara través de dos métodos;
ADOX y DAO.
ADOX tiene la desventaja que falla a la hora de trabajar con reportes, formularios, macros y
módulos, ADOXesta bien para trabajar otro tipo de bases de datos, las cuales no incluyen estos
objetos.Por esta razón dejaremos ADOX por un lado y solo no s enfocaremos en DAO.
DAO nos ofrece la siguiente jerarquía de objetos:
Container > Document > Permission
Que más o menos quieren decir:
Container:Colección de objetos por tipo (Tablas, consultas,reportes, macros ó módulos)
Ducument:Objeto específico (tabla,consulta, reporte, formulario, macro ó módulo)
Permission:Permisos para el objeto específico
Podemos accedera estos elementos bajo el objeto "base de datos", que es fácil de describir
porque trabajamos con el a menudo:
Dim db As DAO.Database
Set db = Application.CurrentDb
Veamos los objetos más a detalle:
Container (Colección de objetos de un tipo específico)
Se refiere a la colección completa de un tipo específico. Entre los Containers tenemos:
- Tables (Tablas y Consultas)
- Forms (Formularios)
- Reports (Reportes)
- DataAccessPages (Páginas de datos)
- Scripts (Macros)
- Modules (Módulos)
- Databases (Bases de datos del grupo de trabajo)
También existen otros Containers que no usamos mucho:
- Relationships (Relaciones)
- SysRel (Relaciones del sistema)
Document (Objeto específico)
Se refiere a un objeto como una tabla, consulta, reporte, formulario, etc. Si tomamos por
ejemplo la tabla "Clientes", esta es un Document que se encuentra dentro del Container "Tables"
Permission (Permiso)
Los permisos son un valorde tipo Entero Largo (Long), en el cual podemos leer, asignar,
modificar ó eliminar valores de permisos.
Veamos algo de código sobre lo que hemos explicado hasta ahora:
Imaginemos quetenemos al usuario "Byron Contreras"y queremos obtenerlos permisos que
tiene sobre la tabla "Clientes"
Dim db As DAO.Database
Dim cont As DAO.Container
Dim doc As DAO.Document
Dim lngPermisos as Long
'Base de datos
Set db = CurrentDB
'Container (colección a la que perteneceel objeto que nos interesa)
Set cont = db.Containers("Tables")
'Document (Objeto específico)
Set doc = cont.Documents("Clientes")
'Usuario sobre el que se hará la consulta
doc.UserName= "Byron Contreras"
'Permisos
20. lngPermisos = doc.Permissions
En este momento, en la variable "lngPermisos"se encuentra un valorque representa a todos los
permisos que se tienen sobreel objeto.
9.9 Permisos Específicos
Los permisos que se pueden leer, asignar ó eliminar varían dependiendo del objeto. Entre las
constantes de permisos, para los diferentes objetos tenemos:
Constante:Valor:Container(Aplica a):Permiso para:
dbSecDBCreate 1 Base de datos Crear nuevas bases de datos
dbSecDBAdmin 8 Base de datos Replicaro cambiar contraseña
dbSecDBOpen 2 Base de datos Abrir
dbSecDBExclusive 4 Base de datos Abriren modo exclusivo
dbSecReadDef4 Tablas y Consultas Leer definiciones
dbSecWriteDef65548 Tablas y Consultas Editar/modificar/actualizary eliminar definiciones
dbSecRetrieveData 20 Tablas y ConsultasLeer datos
dbSecInsertData 32 Tablas y Consultas Insertardatos
dbSecReplaceData 64 Tablas y Consultas Editar/modificar/actualizar datos
dbSecDeleteData 128 Tablas y Consultas Eliminar datos
acSecFrmRptExecute256 Formularios y Reportes Abrir
acSecFrmRptReadDef4 Formularios y Reportes Leerel diseño
acSecFrmRptWriteDef65548 Formularios y Reportes Modificarel diseño
acSecMacExecute 8 Macros Ejecutar
acSecMacReadDef10 Macros Leer el diseño
acSecMacWriteDef65542Macros Modificar
acSecModReadDef2 Módulos Leer
acSecModWriteDef65542Módulos Editar
dbSecNoAccess 0 TodosNingún permiso
dbSecFullAccess 1048575 Todos Permisos completos(Administrar)
dbSecCreate 1 Todos Crear nuevos objetos
dbSecDelete 65536 Todos Eliminar
dbSecReadSec 131072 Todos Leer información de seguridad (permisos)
dbSecWriteSec 262144 Todos Editar/modificar/actualizar información de seguridad (permisos)
dbSecWriteOwner 524288 Todos Cambiar el propietario del objeto
En realidad los permisos son un valortipo BitMask, en el cual tenemos que realizar
comparaciones con los operadores AND, OR, AND NOT para obtener los resultados que
deseamos, por ejemplo:
En el código anteriorse puede observar como obtenerel valor de permisos que contiene un
Document, este valor lo encontramos en:
doc.Permissions
Para revisar si hay un permiso específico:
If (doc.Permissions ANDdbSecRetrieveData) Then
Msgbox "Si hay permiso para leer datos"
End if
Para asignar un permiso:
doc.Permissions = doc.Permissions OR dbSecInsertData
Para eliminar un permiso:
con.Permissions = con.Permissions ANDNOT dbSecDeleteData
Veamos esteejemplo completo:
21. Imaginemos quetenemos al usuario "Byron Contreras", y queremos sabersi tiene el permiso de
"Insertar datos"en la tabla "Clientes", si no tiene el permiso se lo asignamos. Al final también le
quitaremos el permiso de eliminar datos de la misma tabla
Dim db As DAO.Database
Dim cont As DAO.Container
Dim doc As DAO.Document
'Base de datos
Set db = CurrentDB
'Container (colección a la que perteneceel objeto que nos interesa)
Set cont = db.Containers("Tables")
'Document (Objeto específico)
Set doc = cont.Documents("Clientes")
'Usuario sobre el que se hará la consulta
doc.UserName= "Byron Contreras"
'¿Tiene Permiso?
'verificamos el valorBitMask de permisos con el valorespecífico del permiso
If(doc.Permissions ANDdbSecInsertData) then
Msgbox "Si hay permiso para leer datos"
Else
'aquí entramos porqueno hay permiso, entonces se lo asignamos
doc.permissions= doc.permissions OR dbSecInsertData
End If
'Quitarle el permiso para eliminar datos
doc.permissions = doc.permissions ANDNOT dbSecDeleteData
set doc = Nothing
set cont = Nothing
set db = Nothing
9.10 Casos Especiales De Permisos
Objetos Nuevos:
Existe un tipo de permiso para poder crear objetos nuevos, aquí no tenemos un nombre de
Document. Para verificar estepermiso lo hacemos directamente sobre el Container.
Revisemos si el usuario "Byron Contreras"tiene permiso de crearnuevas tablas:
Dim db As DAO.Database
Dim cont As DAO.Container
'Base de datos
Set db = CurrentDB
'Contenedor (colección a la que pertenece el objeto quenos interesa)
Set cont = db.Containers("Tables")
'Usuario sobre el que se hará la consulta
cont.UserName = "Byron Contreras"
'¿Tiene Permiso?
'verificamos el valorBitMask de permisos con el valorespecífico del permiso
Ifcont.Permissions ANDdbSecCreate then
Msgbox "Si existen permisos para creartablas nuevas"
End If
set cont = Nothing
set db = Nothing
Permisos Sobre La Base De Datos:
Cuando revisamos permisos para la Base de datos, el nombredel Document siempre se llama
"Msysdb".
Revisemos si el usuario "Byron Contreras"tiene permiso de abrirla base de datos:
Dim db As DAO.Database
Dim cont As DAO.Container
Dim doc As DAO.Document
'Base de datos
22. Set db = CurrentDB
'Contenedor (colección a la que pertenece el objeto quenos interesa)
Set cont = db.Containers("Databases")
'Documento (Objeto específico)
Set doc = cont.Documents("Msysdb")
'Usuario sobre el que se hará la consulta
doc.UserName= "Byron Contreras"
'¿Tiene Permiso?
'verificamos el valorBitMask de permisos con el valorespecífico del permiso
Ifdoc.Permissions ANDdbSecDBOpen then
MsgBox "Si tienes permiso para abrir la base de datos"
End If
set doc = Nothing
set cont = Nothing
set db = Nothing
9.11 Verificar Si Un Usuario T iene Un Permiso
(Para verificarun permiso específico favor de ir atrás al inciso 9.9 Permisos Específicos)
Nosotros podemos revisar si un usuario tiene algún permiso específico sobre un objeto y obtener
que NO existen permisos, pero podría ser queel usuario SI tenga el permiso porque estese
podría estar heredando. Un usuario puede tener permiso sobre un objeto porvarias razones:
- El usuario tiene permisos dados sobre el objeto
- El usuario pertenecea un grupo, este grupo tienepermisos sobre el objeto y el usuario está
heredando los permisos del grupo
- El usuario es el propietario del objeto (creador)
Para conocer si un usuario tiene un permiso, no importando de dondevenga podemos consultar
la propiedad "AllPermissions"del Document:
Dim db As DAO.Database
Dim cont As DAO.Container
Dim doc As DAO.Document
'Base de datos
Set db = CurrentDb
'Contenedor (colección a la que pertenece el objeto quenos interesa)
Set cont = db.Containers("Databases")
'Documento (Objeto específico)
Set doc = cont.Documents("Msysdb")
'Usuario sobre el que se hará la consulta
doc.UserName= "Byron Contreras"
'¿Tiene Permiso?
'verificamos el valorBitMask de permisos con el valorespecífico del permiso
Ifdoc.AllPermissions AnddbSecDBOpen Then
MsgBox "Si tienes permiso para abrir la base de datos"
End If
Set doc = Nothing
Set cont = Nothing
Set db = Nothing
Aquí sabemos si realmenteexisteel permisos para el usuario,auque no sabemos si viene por
permiso directo al usuario, si vienede algún grupo ó por serel propietario
9.12 Propietario De Los Objetos (Owner)
Todos los objetos tienen un propietario, que es el nombredel usuario que los ha creado. El
propietario del objeto predeterminadamente tienetodos los permisos sobre el objeto. También
es posible cambiarde propietario a los objetos.
Veamos un ejemplo de como conocerquién es el propietario (Owner) de un objeto:
Queremos conoceral dueño de la tabla "Clientes":
23. Dim db As DAO.Database
Dim cont As DAO.Container
Dim doc As DAO.Document
Dim strDueño As String
Set db = CurrentDb
Set cont = db.Containers("Tables")
Set doc = cont.Documents("Clientes")
strDueño = doc.Owner
MsgBox "El dueño de la tabla Clientes es:" & strDueño
Set doc = Nothing
Set cont = Nothing
Set db = Nothing
9.13 Funciones útiles
íFelicitaciones!
En este punto ya sabes como operar los permisos, y como ya te aprendistetodo muy bien, ya
podemos empezara simplificar el código y crear nuestros procedimientos:
Function ExistePermisoEnObjeto(ByVal strContainer, _
ByVal strDocumentAs String, _
ByVal strUsuarioGrupo As String, _
ByVal lngPermiso As Long) As Boolean
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim db As DAO.Database
Set db = CurrentDb
With db.Containers(strContainer).Documents(strDocument)
.UserName = strUsuarioGrupo
If (.Permissions And lngPermiso) Then ExistePermisoEnObjeto = True
End With
Set db = Nothing
End Function
Function ExistePermisoCrearObjetos(ByVal strContainer,_
ByVal strUsuarioGrupo As String) As Boolean
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim db As DAO.Database
Set db = CurrentDb
With db.Containers(strContainer)
.UserName = strUsuarioGrupo
If (.Permissions And dbSecCreate) Then ExistePermisoCrearObjetos = True
End With
Set db = Nothing
End Function
Sub AgregarPermisoEnObjeto(ByVal strContainer, _
ByVal strDocumentAs String, _
ByVal strUsuarioGrupo As String, _
ByVal lngPermiso As PermissionEnum)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim db As DAO.Database
Set db = CurrentDb
With db.Containers(strContainer).Documents(strDocument)
.UserName = strUsuarioGrupo
.Permissions = .Permissions Or lngPermiso
End With
Set db = Nothing
24. End Sub
Sub PermitirCrearObjetosNuevos(ByVal strContainer, _
ByVal strUsuarioGrupo As String, _
ByVal Permitir As Boolean)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim db As DAO.Database
Set db = CurrentDb
With db.Containers(strContainer)
.UserName = strUsuarioGrupo
If Permitir Then
.Permissions = .Permissions Or dbSecCreate
Else
.Permissions = .Permissions And Not dbSecCreate
End If
End With
Set db = Nothing
End Sub
Sub EliminarPermisoEnObjeto(ByVal strContainer, _
ByVal strDocument As String, _
ByVal strUsuarioGrupo As String, _
ByVal lngPermiso As PermissionEnum)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim db As DAO.Database
Set db = CurrentDb
With db.Containers(strContainer).Documents(strDocument)
.UserName = strUsuarioGrupo
.Permissions = .Permissions AndNot lngPermiso
End With
Set db = Nothing
End Sub
Function ObtenerPropietarioObjeto(ByVal strContainer, _
ByVal strDocument As String) As String
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim db As DAO.Database
Set db = CurrentDb
ObtenerPropietarioObjeto = db.Containers(strContainer).Documents(strDocument).Owner
Set db = Nothing
End Function
Sub CambiarPropietarioObjeto(ByVal strContainer, _
ByVal strDocument As String, _
ByVal strUsuario As String)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim db As DAO.Database
Set db = CurrentDb
db.Containers(strContainer).Documents(strDocument).Owner = strUsuario
Set db = Nothing
End Sub
Sub QuitarTodosLosPermisos(ByVal strUsuarioGrupo As String)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim db As DAO.Database
Dim cont As DAO.Container
25. Dim doc As DAO.Document
On Error Resume Next
Set db = CurrentDb
For Each cont In db.Containers
'permisos en los objetos
For Each doc In cont.Documents
doc.UserName = strUsuarioGrupo
doc.Permissions = dbSecNoAccess
Next doc
'permisos para objetos nuevos
cont.UserName = strUsuarioGrupo
cont.Permissions = dbSecNoAccess
Next cont
Set db = Nothing
End Sub
Sub AsignarTodosLosPermisos(ByVal strUsuarioGrupo As String)
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
Dim db As DAO.Database
Dim cont As DAO.Container
Dim doc As DAO.Document
On Error Resume Next
For Each cont In db.Containers
'permisos para objetos nuevos
cont.UserName = strUsuarioGrupo
cont.Permissions = dbSecFullAccess
'permisos en los objetos
For Each doc In cont.Documents
doc.UserName = strUsuarioGrupo
doc.Permissions = dbSecFullAccess
Next doc
Next cont
Set db = Nothing
End Sub
9.14 ¿Cómo Puedo Abrir Una Base De Datos Definida Con Seguridad Por Usuarios?
Eso depende que quieras hacercon la base de datos, puedes tener dos intenciones:
- Acceder a los datos (tablas y consultas)
- Automatizar la base de datos, es decir, tener acceso también a los objetos como reportes,
formularios, macros, módulos, barras de herramientas, etc.
Abrir Base De Datos Y AccederA Los Datos (Tablas Y Consultas)
Puedes usar el siguiente procedimiento:
Sub DAO_AbrirBaseDatosSegura()
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
On Error GoTo Err_Procedimiento
Dim strArchivoMDBAs String
Dim strContraseñaBDAs String
Dim dbe As DAO.DBEngine
Dim db As DAO.Database
'Definir datos de apertura...
strArchivoMDB = "Archivo de base de datos .mdb"
strContraseñaBD= "Contraseña de la base de datos"
'Crear una nueva instancia del objeto DBEngine (Motor de base de datos Microsoft Jet)
Set dbe = New DAO.DBEngine
26. dbe.SystemDB= "Ruta completa archivo de grupo de trabajo .mdw"
dbe.DefaultUser= "Nombre del usuario"
dbe.DefaultPassword = "Contraseña del usuario"
'abrir la base de datos
Set db = dbe.OpenDatabase(strArchivoMDB, False, False, "MS Access;PWD=" &
strContraseñaBD)
MsgBox "Base de datos abierta:"& vbCrLf& db.Name, _
vbInformation, _
"Operación exitosa!"
db.Close
Salir_Procedimiento:
Set db = Nothing
Set dbe = Nothing
Exit Sub
Err_Procedimiento:
MsgBox Err.Description,vbCritical, "Error número "& Err.Number
Resume Salir_Procedimiento
End Sub
Abrir Base De Datos Y Automatizarla
Puedes usar el siguiente procedimiento:
Sub Shell_AbrirBaseDatosSegura()
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
'Procedimiento que abre una base de datos definida con Seguridad Por Usuarios _
y devuelve el objeto Application parapoder automatizarlo
'El procedimiento no funciona si existe contraseña de base de datos
On Error GoTo Err_Procedimiento
Dim strArchivoEXEAs String
Dim strArchivoMDBAs String
Dim strArchivoMDWAs String
Dim strUsuario As String
Dim strContraseña As String
Dim aplAccess As Access.Application
Dim strShell As String
'Definir datos de apertura...
'Archivo ejecutable de Microsoft Access
strArchivoEXE = SysCmd(acSysCmdAccessDir) &"MSACCESS.exe"
strArchivoMDB = "Archivo de base de datos .mdb"
strArchivoMDW = "Archivo de grupo de trabajo .mdw"
strUsuario = "Nombre de usuario"
strContraseña = "Contraseña del usuario"
'Construir la cadena para la función Shell
strShell = """" & strArchivoEXE& """" & " " & _
"""" & strArchivoMDB& """" & " " & _
"/User " & strUsuario &" " & _
"/Pwd " & strContraseña &" " & _
"/NoStartup " & _
"/Wrkgrp " & """" & strArchivoMDW& """"
'Si la función Shell tiene éxito tomamos el archivo/objeto(aplicación Access)
IfShell(strShell, vbHide) Then
27. 'A veces el archivo tarda en abrir. Si GetObjet no lo encuentra
'nos dará error, entonces lo metemos a un bucle hasta que lo encuentre
Do
On Error Resume Next
Set aplAccess = GetObject(strArchivoMDB)
DoEvents
Loop Until Err.Number = 0
End If
MsgBox "Proyecto abierto:"& aplAccess.CurrentProject.Name, _
vbInformation, _
"Operación exitosa!"
'Acceso a datos:
'aplAccess.CurrentDB...
aplAccess.Quit
Salir_Procedimiento:
Set aplAccess = Nothing
Exit Sub
Err_Procedimiento:
MsgBox Err.Description,vbCritical, "Error número "& Err.Number
Resume Salir_Procedimiento
End Sub
9.15 ¿Cómo valida Access los permisos?
Cuando creas un usuario nuevo, tienes que asignarleun ID. Este ID queda guardado en ambos
archivos, en el Grupo de trabajo y en tu base de datos,este IDes el que realmente cuenta todo el
tiempo.
Cuando ingresas a la base de datos proporcionas un nombrede usuario y contraseña,con estos
datos Access recupera el IDdel usuario internamente, luego va al archivo de grupo de trabajo y
revisa si el nombre del usuario y el IDcorresponden, de allí Access determinará si eres un
usuario válido ó no.
Esto es lógico, porque imagínate que en tu base de datos tienes un usuario llamado "Byron
Contreras"con su respectiva contraseña, este usuario tiene permisos completos sobretodo.
Alguien podríaintentarcrear un nuevo grupo de trabajo y agregarun usuario llamado también
"Byron Contreras"y que no tenga contraseña,luego puede intentarabrir la base de datos
mencionadacon estenuevo grupo de trabajo,esperando poder entrarcon el usuario "Byron
Contreras"y sin contraseña. Esto no es posible porque al crear el usuario en ambos grupos de
trabajo se les asignó un ID diferente, y por lo tanto no hay permiso de ingreso.
Si alguien conociera el IDcon el que "Byron Contreras"fue ingresado en el grupo de trabajo
original, si le funcionaría el truco, porqueen el nuevo grupo de trabajo crearía al usuario "Byron
Contreras"con el mismo ID.
Esto es importanteentenderlo porque:
¿Qué pasaría si alguien por error te borra el archivo de grupo de trabajo?
Si tienes debidamente guardados los IDy nombres de los usuarios y grupos, solo creas un nuevo
grupo de trabajo con esos datos.
Si no tienes guardada esa información es casi seguro que pierdes tu base de datos porque no
habrá como accesara ella.
¿Has pensado como se manejan los permisos entre bases de datos creadas en diferentes
máquinas?, ¿Por qué puedo abrirtus bases de datos y tu las mías?
La respuesta es simple, si recuerdas, Access trabaja predeterminadamente con el grupo de
trabajo "System.mdw", que es el mismo en tu máquina y en la mía. Este grupo de trabajo tiene
dos usuarios predeterminados "Admin"y "User", los cuales contienen cada uno un ID, que es el
mismo también en ambas máquinas.
Si creas un nuevo grupo de trabajo, se crearán estos mismos usuarios y el IDse mantendrá.
Los usuarios Admin y User ya vienen predeterminados y no podemos conocersu IDporque
nosotros no los hemos creado, solo la gente de Microsoft sabrá cual es.
Con esto podemos deducir que:
28. Si tú tienes una base de datos definida con Seguridad por usuarios, al usuario "Admin"le borras
la contraseña de ingreso, y además le concedes todos los permisos, casi le estas eliminando la
seguridad por usuarios, porque si recuerdas, Access predeterminadamente te ingresa con el
grupo de trabajo "System.mdw"y con el usuario "Admin"y sin contraseña, y como el IDdel
usuario "Admin"es el mismo en ambas bases de datos y grupos de trabajo, te dejará entrar
libremente.
9.16 ¿Cómo Puedo Quitarle La Seguridad Por Usuarios A Una Base de Datos?
Tendrías que seguir los siguientes pasos:
- Ingresar a la base de datos con una cuenta de Administrador
- Asignarle permisos completos de todos los objetos y de la base de datos a los usuarios Admin y
User
- Poner como propietario de todo al usuario Admin
- Agregar al usuario Admin al grupo de Admins (Administradores)
- Por último crear una nueva basede datos y desde allí realizar la importación de todos los
objetos
Aquí te dejo el código:
Sub EliminarSeguridadPorUsuarios()
'Byron Contreras - byronlcl@gmail.com - 2,009
'.............................................
'Para correreste procedimiento debes ser miembro del grupo _
de Administradores
On Error Resume Next
Dim db As DAO.Database
Dim i As Integer
Dim strUsuarioGrupo As String
Dim cont As DAO.Container
Dim doc As DAO.Document
Dim usr As DAO.User
Set db = CurrentDb
'asignarle todos los permisos al usuario Admin y al grupo Users,
'poner como propietario de todos los objetos al usuario Admin
For i = 1 To 2
strUsuarioGrupo = IIf(i = 1, "Admin", "Users")
For Each cont In db.Containers
'objetos nuevos
cont.UserName= strUsuarioGrupo
cont.Permissions= dbSecFullAccess
'objetos existentes
For Each doc In cont.Documents
doc.UserName= strUsuarioGrupo
doc.Permissions = dbSecFullAccess
IfstrUsuarioGrupo = "Admin" Then doc.Owner = strUsuarioGrupo
Next doc
Next cont
Next i
'agregar al usuario Admin al grupo Admins
With DBEngine.Workspaces(0).Groups("Admins")
Set usr = .CreateUser("Admin")
.Users.Appendusr
.Users.Refresh
End With
Set db = Nothing
End Sub
9.17 Consultas Con Acceso De Propietario (With OwnerAccess Option)
Existe una opción para que nadietenga acceso a tus tablas y que a la vez puedan ser
actualizadas. Para lograr esto, primero debes quitarlea los usuarios todos los permisos sobre la
29. tabla que deseas proteger, luego debes crear una Consulta de Acción (sobre la tabla) y la defines
con With Owner Access Option.
Através de esta consulta cualquierusuario puede modificar la tabla, aunque no tenga ningún
permiso sobre la misma. Este tipo de consulta no puedeser modificada por nadie, solo por el
propietario (creador). Si un usuario intentacualquier cosa directamente sobre la tabla los
permisos serán denegados.
Manualmente:
Crea tu consulta en la vista de diseño, en el área vacía donde se muestran las tablas le das un clic
secundario, en el menú desplegable seleccionas "Propiedades", dentro de las propiedades busca
por "Permisos de Ejecución", allí escoges "De Propietario"
Si estas creando la sentenciaSQL:
Crea tu cadena normalmente y al final de la sentencia SQL le agregas WIHT OWNER
ACCESS OPTION
9.18 Para Finalizar
Utilizando la Seguridad Por Usuarios estamos Administrando a nuestrosusuarios tal y como
Access nos Administra a nosotros
Algunas personas crean sus propias tablas para manejar sus Usuarios, Objetos y Permisos, pero
en lo personal me pareceque es no aprovechar las herramientas que Access ya nos ha dado,
además tienen que volver a inventar lo mismo, y lo que me parecemás delicado es que el
usuario Admin sigue con los permisos completos, lo cual quiere decir quepor automatización
podemos abrir esas bases de datos y hacerles lo que deseemos. Tengo un ejemplo quehace eso,
demostrarlo vulnerable que pueden ser esas bases de datos con esas condiciones, por ahí se los
pongo también...
La seguridad por usuarios funciona completamente en Access 2,003ó inferior, en Access 2,007
también es compatiblepero ya no da la opción de asegurar bases de datos en el formato 2,007,y
este es un gran tema de debate...
Saludos cordiales,
Byron Contreras