Denegar acceso a tablas

Ayúdame con lo siguiente:
Tengo un pequeño desarrollo en Access 2003 que control los servicios de un lavado de autos, necesito hacer que el operador del sistema solo pueda acceder a la información mediante los formularios y reportes y no tenga capacidad de tocar las tablas porque al parecer elimina registros de servicios para que darse él con el dinero de algunos servicios.
¿Cómo puedo hacer esto?
Respuesta
1
El primer formulario se debe abrir sólo con un macro autoexec, en las propiedades de este formulario tienes que poner Si en la opción MODAL y en eventos del formulario escribir un alinea para que se cierre el access al cerrarse el mismo:
[nombredelabase].Close
Otra opción más sencilla es ponerle un autonumérico a la base con los movimientos, si el borra un renglón te vas a dar cuenta enseguida
Espero haber servido de algo, cualquier duda pregunta de vuelta

6 respuestas más de otros expertos

Respuesta
2
Lo mejor es montar las tablas en sql server y acceder a las mismas a través de access... utilizando access como cliente. Así no podrá tocar las tablas y el access solo servirá para introducir datos
Respuesta
2
En función del nivel de usuario del operador deberás implementar más o menos seguridad.
De entrada dividir la base en tablas por un lado y resto de objetos por el otro, con las tablas vinculadas a la primera. Lo que se llama concepto FrontEnd-BackEnd. En mi web hay una explicaciñon de Anna del Alba al respecto: http://www.llodax.com/smf/index.php?topic=431.0
A la base de las tablas le pones una contraseña para que no pueda acceder. Con eso ya estableces que no pueda accederte a los datos en esa base.
Ahora debes proteger el frontend. Si el usuario es 'poco espabilado', bastaría con ocultar las tablas. Botón secundario en la tabla, marcar check de oculta y, en las opciones de la base de datos, establecer que no se muestren los objetos ocultos.
Si es más espabilado puedes hacer otras cosas, ademas de eso:
- Ocultar la ventana de Access (es una opción que impide acceder a la ventana madre... pero que no me gusta demasiado). Puedes encontrar la funciñon buscando por fSetAccessWindow (creo que esta en mi página)
- Evitar que el usuario pueda acceder al diseño. Existe una función que anula la tecla mayúsculas e impide que el usuario acceda a la base con la tecla mayúsculas pulsada y pueda ver los objetos. En el foro de Access y VBA de mvp-access.com encontraras la función de Javier Garcia: http://www.mvp-access.com/foro/forum_posts.asp?TID=638 , en mi pagina una variación del Búho: http://www.llodax.com/smf/index.php?topic=405 y, en la web del propio Búho puedes encontrar varios ejemplos: http://www.llodax.com/smf/index.php?topic=405.0 y busca por la palabra shift.
- Ocultar las tablas con una función especial. Existen varias alternativas de Chea, Búho, Marius y Emilio: http://www.llodax.com/smf/index.php?topic=49.0
- Encriptar los datos. En la web de Javier.Mil tienes mucha información de seguridad de datos: http://accessdemo.web.officelive.com/
Evidentemente todo esto no tiene sentido si los formularios tienen la propiedad Permitir eliminar establecida a Sí, claro.
Respuesta
1
En principio, lo más que se me ocurre es que ocultes las tablas.
Con el botón derecho del ratón, en las propiedades de cada tabla, puedes poner que sea oculta. Si después, en las opciones de la base de datos, pones que no se vean las tablas ocultas... evitarías que las viera, pero no es mucho.
Para complicarle un poco más la tarea yo haría un par de cosillas más.
En primer lugar pondría en la tabla un campo 'autonumérico' que te permitiría ver si falta algún registro. Renumerar ese tipo de campos es posible, pero lleva más trabajo.
Por último, lo que haría sería crear un registro o log de la información grabada fuera de la base de datos. Con este registro podrías saber lo que se ha grabado y, si piensas que falta algo de las tablas puedes buscarlo ahí.
Lo podrías hacer con un código de este estilo:
sub guardaLog(byval dato1aGuardar as string,byval dato2aGuardar as string, byval dato3aGuardar as string)
    dim nf as integer
    nf=freefile
    Open environ("temp") & "\miLog.txt" for append as nf
    Print #nf, dato1aGuardar, dato2aGuardar, dato3aGuardar, format$(now(),"yyyymmdd hhmmss")
    Close nf
end sub
Este código te guardaría en el fichero "miLog.txt", dentro de la carpeta temporal del usuario, los 3 datos que le pasases (supongamos el servicio, el operario y el importe). Además te pondría la hora exacta en que se graba el registro.
Por último, se me ocurre que otra posibilidad estaría en tener las tablas en una base de datos externa y que sólo tenga permisos de escritura sobre el fichero de la base de datos (no puedes quitar los permisos sobre la carpeta porque no podría abrirla).
Respuesta
1
Yo te aconsejo que implantes en tu aplicación un sistema de seguridad que incluya medidas de protección como deshabilitar la tecla shift, acceso de usuarios,.. etc, etc
Se que es un trabajo laborioso y que requiere conocimientos, como mínimo de Visual basic, pero no hay otra forma de impedir que anden donde no quieres.
Yo utilizo Access 2002, pero te puedo pasar algún código que seguro que funciona en 2003.
No sé que más decirte, que aquí estoy si puedo ayudarte en algo.
Respuesta
1
En herramientas, seguridad, tienes permisos de usuario y de grupo. Dentro de esa pestaña debes crear un usuario que solo pueda añadir registros, nunca modificar o eliminar y ese usuario sera el operador del sistema.
Ademas añade contraseña general a la base de datos que solo conozcas tu. Con ello el operador no podrá realizar cambios en la tabla. Solo tu.
Respuesta
1
Yo pregunte algo muy parecido hace una tiempo... y me respondieron lo siguiente:
¿Hola, qué tal?
Lo ideal es que al terminar tu aplicación crees un archivo MDE:
Crear un archivo MDE protege los elementos (Formularios, informes, macros, módulos) Pero ojo, hay que guardar una copia del mdb ya que el mde no permite cambios en el diseño. Así que para el diseño seguís trabajando con el mdb y cuando tenés una "nueva versión" la pasás a mde y lo reemplazás por el anterior...
- Un archivo mde se obtiene por medio de Herramientas >>>> Utilidad de la base de datos >>> Crear archivo MDE...
- En caso de que esta opción aparezca deshabilitada (atenuada) se deberá convertir la base a una versión superior por medio de Herramientas >>> Utilidad de la base de datos >>> Convertir base de datos.
- Si al convertir la base en mde se recibe un mensaje de error, se debe a que existe alguna falla en la ventana de VBA, presioná Atl+F11 luego en Depuración >>>> Compilar, si hay algo lo mostrará, si aún así no es posible crear la mde entonces es posible que en el código existan procedimientos sin origen, es decir si creaste un combo con el asistente y luego borraste ese combo en el formulario el código se ha quedado 'huérfano' en la ventana VBA, ya que no se borra al eliminar el combo. Una buena opción, aunque lenta, es crear una base nueva en blanco e ir importando los objetos de a uno e
ir creando la mde, en el momento que no deje crear la mde sabrás cuál es el objeto que requiere revisión.
Bueno, como ya te dije, el MDE protege el código y los elementos (Formularios, Informes, Macros y Módulos), pero no así las tablas ni las consultas. Por consiguiente, antes de crear el mde, lo que yo hago es crear un formulario de inicio que se maximice al abrir (DoCmd. Maximize), cosa que ocupe toda la pantalla, sin botones de maximizar, minimizar ni cerrar, con la propiedad Emergente activada (Sí), Bordes "Diálogo" o "Ninguno", Movible (No), etc. También si querés podes dejar el botón de Cerrar y poner en el evento Al cerrar del formulario (DoCmd. Quit), para que se cierre la aplicación al cerrar ese formulario.
Una vez creado el formulario principal lo ponés como formulario de inicio:
Herramientas >>>> Inicio. >>>> Mostrar Formulario/Página >>>> Seleccionás tu formulario principal. En esta misma ventana desactivás todas las casillas de verificación.
Ahora tu ventana de base de datos ya no será visible, a menos que inicies la aplicación con la tecla "Shift" presionada. Así que desactivamos la propiedad "AllowByPassKey" que hace que se pueda saltar el inicio e ir directo a la ventana de base de datos con la tecla "Shift". Esta propiedad, para poder usarla primero tendrás que crearla. Con el siguiente código creamos la propiedad y la desactivamos.
Esto lo pegás suelto en el código del formulario o en un módulo:
-----------------------------------------------------
Sub SetBypassProperty() 
Const DB_Boolean As Long = 1 
ChangeProperty "AllowBypassKey", DB_Boolean, False 
End Sub 
Function ChangeProperty(strPropName As String, varPropType As Variant, varPropValue As Variant) As Integer 
Dim dbs As Object, prp As Variant 
Const conPropNotFoundError = 3270 
Set dbs = CurrentDb 
On Error GoTo Change_Err 
dbs.Properties(strPropName) = varPropValue 
ChangeProperty = True 
Change_Bye: 
Exit Function 
Change_Err: 
If Err = conPropNotFoundError Then 
Set prp = dbs.CreateProperty(strPropName, _ 
varPropType, varPropValue) 
dbs.Properties.Append prp 
Resume Next 
Else 
' Error desconocido. 
ChangeProperty = False 
Resume Change_Bye 
End If 
End Function 
------------------------------------------------------------
Creás un botón y en el evento Al hacer Clic ponés:
--------------------------------------------
SetBypassProperty
MsgBox "Tecla Shift desactivada", vbInformation, "Tecla Shift" 
--------------------------------------------
Abrís el formulario y le das clic al botón, así quedará desactivada la propiedad. Volvés a la vista de diseño y borrás el botón. Cerrás la aplicación y la próxima vez que vayas a abrirla ya no te podrás saltar el inicio.
Ahora sí creás el MDE y listo!
Eso es todo. Tratá de manejar esta información con cuidado, guardate siempre una copia de seguridad antes de crear un MDE o trabaja con la propiedad AllowByPassKey.
Bueno.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas