Access - Seguridad para la base de datos

 
Vista:
sin imagen de perfil

Seguridad para la base de datos

Publicado por carlos (46 intervenciones) el 05/08/2023 18:33:29
Saludos, tengo terminada una BD en Access 2003 y ahora quisiera darle seguridad para que las tablas de la BE no puedan ser copiadas, al terminar pienso convertir la FE en .mde y con ello protejo lo demás pero no he hallado como proteger las tablas porque ocultándolas en el FE no es fiable. Probé habilitar/deshabilitar la cabecera del fichero mdb con un ejemplo del Búho pero en la medida que la BD crece va haciéndose tan lento el proceso que no me sirve. Si alguien pudiera ayudarme lo agradecería.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Seguridad para la base de datos

Publicado por Anonimo (3316 intervenciones) el 05/08/2023 21:11:43
La seguridad es una utopía.

La única forma de proteger datos (de cualquier entorno informático) es hacer copias de seguridad y la mas importante (la única que se puede considerar que funciona):
No permitir el acceso a esos datos que para comenzar han de estar 'fuera' de la red.

El resto es un juego entre el que sabe mas y el que sabe menos, porque cualquier método publicado de como 'crear una cerradura', es a la vez la información básica para construir la llave.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Joan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Seguridad para la base de datos

Publicado por Joan (90 intervenciones) el 06/08/2023 10:22:30
Hola,

La forma de proteger las tablas es separarlas, crear un back-end y trabajar desde el front-end.

El back-end donde están las tablas lo proteges con contraseña, el front-end, proteges el código VBA. Al entrar en Herramientas bases de datos -> Visual Basic, en la columna de la izquierda, clicas con el derecho del mouse en el título que te aparece en negrita, Propiedades de ... -> Protección. Con esta protección no se puede entrar ni en las tablas ni en el código VBA donde tendrás la contraseña para conectar al back-end. Tampoco te dejará importar a ninguna otra BD.

En este enlace hay un ejemplo de vinculación con password.

https://www.lawebdelprogramador.com/foros/Access/2185958-revincular-tablas-desde-bases-de-datos.html#i2187697

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Seguridad para la base de datos

Publicado por carlos (46 intervenciones) el 06/08/2023 16:01:57
Joan, yo tenía el BE protegido por contraseña, en el FE hice lo que me dijo, protegí con contraseña el VBA, pero no entendí esto
"Con esta protección no se puede entrar ni en las tablas ni en el código VBA donde tendrás la contraseña para conectar al back-end. Tampoco te dejará importar a ninguna otra BD."
Porque igual se dejan importar las tablas y las consultas desde otra BD, los formularios que no tiene funciones vba, los informes y las macros.
Se que cuando lo haga mde ningún formulario y demás se puede importar porque se protegen pero se me ocurre algo:
Si vinculo las tablas solo al abrir el programa y al cerrarlo se desvinculan, si está en mde al tratar de importar a otra BD no se verían las tablas, lo otro es que querían las consultas, que ocultándolas no es una seguridad suficiente pero como no están las tablas entonces no funcionarían y se dificulta llegar a la verdad de la programación.
Encontré una función que hace esto pero solo está para una tabla, si pudiera hacerlo con todas entonces las vincularía y desvincularía todas de una vez al entrar y al salir respectivamente. Quedaría lo de las tablas que no se si se puede hacer algo más.
la función es:
Option Compare Database
Option Explicit

Const cBDnombre As String = "BDSGRv2.mdb"
Dim strBDrutaCompleta As String
Const cBDsubdirectorio As String = "BASE DATOS"
Const cTablaNombre As String = "01TNomencladorEmisora"

Function funVincular()

Rem esta funcion es interesante desde el punto de vista
Rem que durante la primera instalacion No es necesario vincular las
Rem tablas ya que el programa lo hace automaticamente y de forma muy rapida
Rem cada vez y automaticamente rompe el vinculo al entar o bien al salir
Rem de esta manera el usuario puede cambiar de directorio del BD programa y/o BD datos y nunca dara error


On Error GoTo Err_funVincular
Dim td As DAO.TableDef


Rem ruta de la base de datos
strBDrutaCompleta = Application.CurrentProject.Path & "\" & cBDsubdirectorio & "\" & cBDnombre

Rem Compruebo que exista la BD es el directrio especifico
If Len(Dir(strBDrutaCompleta)) = 0 Then
DoCmd.Beep

MsgBox "No se ha podido vincular la BD:" & vbCrLf & _
cBDnombre & vbCrLf & _
"porque No existe la BD en el directorio:" & vbCrLf & _
Application.CurrentProject.Path & "\" & cBDsubdirectorio, vbCritical, "AVISO"

DoCmd.Close
Exit Function
End If

y recordarle que la BE tiene contraseña, donde se ubicaría por si la necesita?
Espero su ayuda, gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Seguridad para la base de datos

Publicado por carlos (46 intervenciones) el 06/08/2023 19:06:59
Aquí: Quedaría lo de las tablas que no se si se puede hacer algo más.
Debe decir: Quedaría lo de las consultas que no se si se puede hacer algo más.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Joan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Seguridad para la base de datos

Publicado por Joan (90 intervenciones) el 06/08/2023 20:16:38
- Si el Backend está protegido, no deja importar ninguna tabla, lo primero que te aparece es que te solicita el password del backend.
Lo que te interesa es que no se modifiquen los datos de las tablas no?

- El frontend lo tengo en accdb,y cuando lo distribuyo cambio la extensión a .accdr, tengo oculto el entorno de access y anulada la tecla shift, (hay muchos ejemplos en la red) y con password en vba. creo que es una seguridad más que suficiente.

- Las consultas, informes, y macros se pueden importar. Y? No lo veo un problema.

- Trabaja con el ejemplo que te puse el enlace, en un post está comentado como poner el password.Adjunto un ejemplo que tenía de Buho. Para que funcione, tendrás que corregir las líneas que te de error para trabajar en 64bits ya que es una versión antigua.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Seguridad para la base de datos

Publicado por carlos (46 intervenciones) el 06/08/2023 21:37:14
amigo, gracias por la colaboración, lo que sucede es que el ejemplo del buho no es lo que busco ahora, lo que necesito, y me disculpa, es que la función que le detallé al principio me deje vincular y desvincula las tablas de la BE en la FE, la función lo hace, pero solo a la tabla, una sola, que tiene la BD del ejemplo, yo se la copié con algunos cambio que le hice en nombres de tablas y BD. La función lo hace bien, y repito, con esa sola tabla, yo necesitaría lo hiciera con todas las que pudiera haber en la BD, ya la contraseña veré como la ubico. Si me pudiera ayudar, estoy atrasado con este proyecto.

Option Compare Database
Option Explicit

Const cBDnombre As String = "BDSGRv2.mdb"
Dim strBDrutaCompleta As String
Const cBDsubdirectorio As String = "BASE DATOS"
Const cTablaNombre As String = "01TNomencladorEmisora"

Function funVincular()

Rem esta funcion es interesante desde el punto de vista
Rem que durante la primera instalacion No es necesario vincular las
Rem tablas ya que el programa lo hace automaticamente y de forma muy rapida
Rem cada vez y automaticamente rompe el vinculo al entar o bien al salir
Rem de esta manera el usuario puede cambiar de directorio del BD programa y/o BD datos y nunca dara error


On Error GoTo Err_funVincular
Dim td As DAO.TableDef


Rem ruta de la base de datos
strBDrutaCompleta = Application.CurrentProject.Path & "\" & cBDsubdirectorio & "\" & cBDnombre

Rem Compruebo que exista la BD es el directrio especifico
If Len(Dir(strBDrutaCompleta)) = 0 Then
DoCmd.Beep

MsgBox "No se ha podido vincular la BD:" & vbCrLf & _
cBDnombre & vbCrLf & _
"porque No existe la BD en el directorio:" & vbCrLf & _
Application.CurrentProject.Path & "\" & cBDsubdirectorio, vbCritical, "AVISO"

DoCmd.Close
Exit Function
End If

Nuevamente un millón de gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Joan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Seguridad para la base de datos

Publicado por Joan (90 intervenciones) el 07/08/2023 19:06:52
Sinceramente no entiendo lo que quieres o yo no lo entiendo, el enlace: https://www.lawebdelprogramador.com/foros/Access/2185958-revincular-tablas-desde-bases-de-datos.html#i2187697 es para revincular tablas, todas las tablas del back-end.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
'*******************************************************************************
 
'* ReVinculaTablas
 
'* recorro las distintas tablas de la base de datos revinculandolas a la ruta
 
'* indicada
 
'* Argumentos: strBDRemota => ruta de la base de datos remota
 
'* uso: ReVinculaTablas "48-DatosAño2005.mdb"
 
'* ESH 30/04/06 12:16
 
'*******************************************************************************
 
 
 
Public Function ReVinculaTablas(strBDRemota As String)
 
Dim i As Long, _
 
    dbs As DAO.Database
 
 
 
On Error GoTo ReVinculaTablas_TratamientoErrores
 
 
 
Set dbs = CurrentDb
 
 
 
For i = 0 To dbs.TableDefs.Count - 1
 
   ' si dbs.TableDefs(i).connect no está vacio, es por que se trata de una tabla vinculada
 
   If (dbs.TableDefs(i).Connect <> "") Then
 
      ' así pues asigno la "nueva" ruta a la tabla vinculada
 
      dbs.TableDefs(i).Connect = ";DATABASE=" & CurrentProject.Path & "\" & strBDRemota & ";PWD=Mipassword" & ";"
 
      dbs.TableDefs(i).RefreshLink
 
   End If
 
Next i
 
 
 
ReVinculaTablas_Salir:
 
Set dbs = Nothing
 
On Error GoTo 0
 
Exit Function
 
 
 
ReVinculaTablas_TratamientoErrores:
 
If Err.Number = 3024 Or Err.Number = 3078 Or Err.Number = 3011 Then
 
   MsgBox "La base de datos " & strBDRemota & vbCrLf & CurrentProject.Path, vbCritical + vbOKOnly, "ATENCION"
 
Else
 
   MsgBox "Error " & Err.Number & " en proc. ReVinculaTablas de Módulo mdlGeneral (" & Err.Description & ")", vbOKOnly + vbCritical
 
End If
 
GoTo ReVinculaTablas_Salir
 
 
 
End Function    ' ReVinculaTablas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Seguridad para la base de datos

Publicado por carlos (46 intervenciones) el 07/08/2023 22:39:43
Gracias por todo Joan, con eso resolví, bendiciones para usted
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar