¿Cómo puedo ocultar una cadena de conexión DAO o ADODB en un documento o plantilla de Word?

1

Los documentos de MS Word tienen un componente de Visual Basic que permite que los procesos se ejecuten cuando ocurren eventos específicos.

Uno de estos eventos es Document_New() , que puede usarse de esta manera para mostrar un "UserForm" que también forma parte del documento de Word:

Private Sub Document_New()
    Dim myForm As UserForm1
    Set myForm = New UserForm1
    myForm.Show
End Sub

El UserForm se parece a un formulario VB6 o MS Access y se pueden agregar varios controles para recopilar información del usuario. En este caso, se colocaría un botón "Enviar" que tenga un evento OnClick() que acceda a la base de datos y devuelva un juego de registros usado en el documento / plantilla.

El código subyacente puede ejecutar consultas SQL en un servidor SQL utilizando un modelo de objetos DAO o ADODB.

El objetivo es ejecutar alguna consulta SQL o procedimiento almacenado que devuelva los datos necesarios para el documento de Word. Todo esto se puede hacer con código y hay un millón de ejemplos y formas de hacerlo.

Sin embargo ... La cadena de conexión para el controlador ODBC o la conexión ADODB deja el nombre del servidor / nombre de usuario / contraseña visible para quien tenga acceso al documento o plantilla de Word (es decir, el usuario abre el documento / plantilla en Word y mira el VB código y ahora puede conectarse y hacer cualquier cosa en las tablas de la base de datos).

¿Cómo puedo crear esta funcionalidad pero no permitir que las propiedades de la cadena de conexión sean visibles para alguien que usa el documento / plantilla?

Si fuera una aplicación VB6, podría compilarse. Pero esto es solo un documento o plantilla de Word y no se puede compilar.

No creo que la funcionalidad "Encriptada" se aplique aquí. Eso simplemente cifra los datos a través de la red. Las propiedades de la cadena de conexión aún son visibles para el ojo curioso.

    
pregunta JustJohn 03.10.2017 - 02:05
fuente

2 respuestas

2

Configure la base de datos para usar la autenticación de Windows, luego agregue IntegratedSecurity = true a la cadena de conexión. Esto hará que la conexión utilice la autorización del usuario que ha iniciado sesión para conectarse a la base de datos.

Esto te protege de varias maneras. Como usted lo requiere, ningún usuario / contraseña se mantiene en la cadena de conexión.

Otra forma en que esto lo protege es que es la autoridad del usuario la que se conecta a la base de datos, no un documento de Word. Eso es importante porque la autoridad no debe viajar oculta dentro de un documento. El usuario controla su propia autoridad.

Finalmente, si está utilizando Active Directory, puede usar la membresía de un grupo de AD para ajustar el acceso a la base de datos, asegurándose de que solo los miembros aprobados del grupo puedan usar el documento de Word para acceder a la base de datos en los niveles que desee.

    
respondido por el John Deters 03.10.2017 - 03:45
fuente
1
  

¿Cómo puedo crear esta funcionalidad pero no permitir que las propiedades de la cadena de conexión sean visibles para alguien que usa el documento / plantilla?

No puedes. La cadena de conexión será visible para cualquier persona que tenga el archivo. Esto es cierto, por cierto, incluso si se trata de una aplicación compilada. Solo se necesita un poco más de trabajo para sacarlos.

Entonces, ¿qué hacer?

La sugerencia de Joahn Deters es buena. Sin embargo, incluso si lo hace, los usuarios seguirán teniendo acceso completo de lectura y escritura a su base de datos. Eso no es óptimo.

No importa si sigue el consejo de Johns o no, también debe seguir el principio de de privilegio mínimo . Eso significa que el usuario de la base de datos (ya sea a partir de las credenciales en la cadena de conexión, o la seguridad integrada de Windows) solo debe tener acceso a la información que necesita. Por lo tanto, limite su privilegio para leer solo de las tablas necesarias y no escriba en ninguna parte.

    
respondido por el Anders 03.10.2017 - 09:47
fuente

Lea otras preguntas en las etiquetas