Resumen Seguridad en Access   (5 mensajes )

Para diseñar la seguridad en la base de datos, yo hago lo siguiente:

1) Ejecuto el administrador de grupos de Access, y ahí creo un fichero mda, el cual
convierto en el grupo de trabajo activo (es decir, no uso el system.mda o mdw).

2) Abro Access y creo la base de datos. Todo el proceso lo vamos a realizar en Acces. En
este momento, el usuario es Admin, y la contraseña "". Crea un usuario (que será el
propietario de la base de datos) con derechos de administración (vamos a poner Marko), y
la contraseña la que tú quieras. Cierra Access y vuélvelo a abrir. Te preguntará el nombre
de usuario y contraseña, y le introduces los últimos que hemos visto. Vuelve a abrir la
base de datos. Como Marko es administrador, puede convertirse en el propietario de la base
de datos. Haz esto con el menú correspondiente (no te lo sé decir de memoria). A
continuación le quitas al usuario Admin los permisos de administración. Tú veras si le
quitas el derecho de escritura y/o lectura. Asegúrate de que no hay tablas o consultas
cuyo propietario sea Admin, en cuyo caso los cambias para que el propietario sea Marko. En
este momento, ya tienes la estructura necesaria para crear los usuarios y grupos para
acceder a la base de datos. Créalos (esto te lo tienes que "currar" tú) y pon los permisos
correspondientes.

3) Si ya tenías creada la base de datos pero siendo propietario Admin, entonces importa
las tablas y demás de la otra base de datos ya con Marko como propietario y usuario
actual, y entonces será éste el propietario de las tablas importadas.

Si no estaba creada la base de datos, crea las tablas, consultas, etc. de la base de datos
(esto lo puedes hacer en cualquier momento a partir de que Marko es administrador y
usuario actual) e introduce los datos iniciales que puedan ser necesarios.

En este momento, y suponiendo que esté el diseño bien hecho, hemos terminado con Access.
Cuando cierres Access, ten en cuenta que sigue estando activo el grupo de trabajo mda que
hemos creado, por lo que si tienes que abrir Access con otra base de datos, tienes que
ejecutar el administrador de grupos de trabajo y unirte al grupo que corresponda.

4) Ahora ya vamos a VB. En circunstancias normales, no será necesario que utilices más de
un Workspace. Ten en cuenta que en cada máquina, el Workspace es local, por lo que sólo
hará falta un workspace en cada máquina, aunque haya 100 usuarios accediendo al mismo
tiempo a la base de datos. Sólo podría esto no ser así si usas un servidor OLE que se
encargue de crear un Workspace por cada usuario que acceda a la base de datos, con lo que
tendrías un servidor OLE con n usuarios, pero sólo uno en cada máquina local.

En resumen, sólo necesitas crear un objeto workspace si tienes que gestionar varios
usuarios al mismo tiempo y con distintas contraseñas. De todas maneras, Microsoft no
recomienda añadir los distintos Workspace a la colección (es decir, no usar el método
Append) para tener una fiabilidad total, ya que si se añaden a la colección, las
contraseñas pueden ser vistas por otros programas. Para acceder a los workspaces, hazlo
mediante el nombre -WK("Usuario")-.



Y con esto ya está hecho el esqueleto de tu aplicación. La versión 2 de Access soporta
perfectamente la implementación de la seguridad. Lo único que resta saber es qué versión
de VB vas a usar para acceder a la base de datos, ya que no es lo mismo en 16 bits que en
32 cuando hay seguridad de por medio.

Espero haberte aclarado un poco más las cosas. Un saludo.

> Guillermo:
>
> Los pasos que me mandaste para colocar la clave funcionaron
> perfectamente, te pido por favor si podes contarme la otra parte como
> trabajar con el visual basic.
>
> Desde ya muchisimas gracias.


Te aseguro que soy el primer sorprendido de que todo haya salido bien...
Ahi te va la segunda parte:

1 Creas un archivo de texto TuAplicación.ini que lo colocas en el
directorio donde va a funcionar tu programa cuando lo instalas, que diga:

[Options]
SystemDB=C:\TuAplicación\system.mda

2 Colocas en la misma oportunidad y el mismo directorio el system.mda que
guardas como el que tiene el password.

3 No declares en tu DataControl la Base de Datos y RecordSouce en las
propiedades sino por código:

DBEngine.IniPath = "C:\TuAplicación\TuAplicación.INI"
DBEngine.DefaultUser = "TuNombreDeUsuario"
DBEngine.DefaultPassword = "TuPassword"
data1.DatabaseName = "C:\TuAplicación\TuAplicación.mdb"
data1.Recordsource = "LoQueCorresponda"

4 Si el astuto que quiere los datos trata de abrirla, usará el system que
tenga instalado, o sea que no podra leer ni modificar nada.
5 Si el astuto es muy astuto intentará usar el system que vea en el
directorio de TuAplicación, en ese caso tendrá que adivinar
"TuNombreDeUsuario" y "TuPassword"

Alberto:
1 Copias la .mdb en otro lado (por si las moscas)
2 Copias el archivo System.mda que esta en C:\access en el mismo lugar
3 Entras en access abres tu base de datos y vas al menu seguridad ->
usuarios -> nuevo
4 Elijes el nombre que te parezca y una contraseña
5 Aunque no lo sepas, ingresaste al programa como Administrador sin
contraseña. Te vas al menu seguridad ->cambiar contraseña y le asignas una
al Administrador.
6 La proxima vez que arranques Access te va a pedir el nombre y contraseña.
Le pones el primer nombre que elijiste y la correspondiente contraseña.
7 Vas al menu seguridad -> autorizaciones y le sacas una por una todas las
autorizaciones del Administrador y los usuarios que hayan en todos los
objetos de la base de datos (listar grupos y usuarios). Obviamente le das
autorizaciones a tu nombre.
8 Notarás, ahora un diferencia de tamaño en el system.mda que tienes ahora
en el direcctorio de Access. Copialo en un directorio que diga que es el
system con password.
9 Copias el primer system que habias guardado en C:\Access. Cuando
arranques nuevamente tu base de datos, no te pedira nombre de usuario, pero
si todo salio bien, tampoco de dejará ver las tablas
10 Identifica y guarda muy bien los dos system, el que funciona con
password y el que no, en todo momento. Y copia el que corresponda cada vez
que quieras hacer una modificacion o prueba. Si no me equivoco por mucho,
estas pruebas te demoraran unas cuantas horas de trabajo. En la proxima te
cuento como usar esa mdb desde VB4.

Guillermo Sieder
Bahia Blanca

Rosenberg, Alberto Alejandro escribió:
>
> Guillermo:
>
> Los pasos que me mandaste para colocar la clave funcionaron
> perfectamente, te pido por favor si podes contarme la otra parte
como
> trabajar con el visual basic.
>

No soy Guillermo, pero yo le haría algún retoque al método propuesto por él, y te lo digo
a ti porque eres el interesado (después tú adoptarás la solución que mejor te parezca).

El pasado día 27 expliqué el sistema que creo yo que es mejor para configurar una base de
datos con seguridad, y como es bastante extenso, supongo que tendrás por ahí el mensaje
(si no, házmelo saber). Así que en principio te remito a ese mensaje antes de seguir
leyendo.

Una vez leído, verás que la diferencia estriba en el lío que te puedes armar teniendo dos
system.mda en dos directorios distintos (además con el mismo nombre). Y si además le
añades el tamaño, que tienes que saber cuál es cada uno para luego copiar uno u otro...
Personalmente creo que es mejor "partir de cero" y crear un fichero mda nuevo, que esté en
el directorio de la aplicación, y que no se llame system, sino de
otra manera. Y a partir de ahí, en todo caso, usar el administrador de grupos de Access
para usar el mda
correspondiente.


Y para usarla en VB:

- En un módulo .bas:

#If Win16 then
    Public Declare Function WritePrivateProfileString Lib "kernel"
_
       (ByVal lpApplicationName As String, _
        ByVal lpKeyName As String, _
        ByVal lpString As String, _
        ByVal lplFileName As String) As Integer
#End If

Public WK as Workspace
Public BD as Database


- Para inicializar el motor Jet (ten en cuenta que el objeto DBEngine sólo se puede
inicializar una vez):

Dim Fichmda as string
Fichmda= "C:\MiApp\Fichero.mda"

#If Win16 then
    Dim FichIni as String
    FichIni = "C:\MiApp\Fichero.INI" 'Ojo, es un fichero ini
    WritePrivateProfileString "Options", "SystemDB", FichIni, FichIni
    DBEngine.IniPath = FichIni
    WritePrivateProfileString "Options", "SystemDB", Fichmda, FichIni
    DBEngine.DefaultUser = "Usuario" 'El que tenga los permisos de administración
    DBEngine.DefaultPassword = "Contraseña" 'La contraseña
#Else
    DBEngine.SystemDB = Fichmda
    DBEngine.IniPath = Fichmda
#End If


Creo que puedes usar SaveSetting en vez de WritePrivateProfileString, pero tiene la
limitación de que el fichero .ini tiene que estar en el directorio Windows, mientras que
de esta manera puede estar en cualquier directorio.

- Para usar un usuario:

Set WK = CreateWorkspace("MiWK", Usuario, Contraseña) 'Pon los strings correspondientes
Set BD = WK.OpenDatabase("MiBase", False, False)


Microsoft aconseja que para mayor seguridad, no se añada el workspace a la colección
workspaces, por lo que no hagas posteriormente un Append.



Y eso es todo. Espero que puedas desarrollar tu programa. Un saludo.

Luis Borello escribió:
>
> > -----Mensaje original-----
> > De: Luis Videla
> > Enviado el: miércoles 11 de febrero de 1998 9:26
> > Para: Luis Borello
> > Asunto: para la lista VB
> >
> >
> > Estoy desarrollando un pequeño sistema donde la Base de Datos
> > esta hecha con Access y la aplicaciones clientes con VB5, el problema
> > es que tengo que implementar una estructura se seguridad (pequeña
> > también, son solo 4 o 5 usuarios), y quisiera saber si alguno ha hecho
> > algo parecido.
> > Si creo Grupos y Usuarios desde Access, ¿Cómo me logeo desde el VB?
> > Probé hacerlo pero cuando le paso el usuario y las password en el
> > CreateWorkspace me da error, y solo me permite hacerlo con el usuario
> > Admin.
> >
> > Desde ya agradezco toda respuesta.
> >
> > Luis Videla
> >
> >

Primero hay que inicializar el objeto DBEngine (una sola vez en la aplicación):
DBEngine.SystemDB = "C:\RutaFicheroMda\Ficheromda.mda" ' o .mdw
DBEngine.IniPath = Lo mismo que SystemDB
DBEngine.DefaultUser = "El propietario de la base de datos"
DBEngine.DefaultPassword = "Su contraseña"


Y luego ya el Login

Set WK = DBEngine.CreateWorkspace("MiWK", Usuario, Contraseña)


Espero que con esto puedas resolver tu problema. Un saludo.




Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com