¿Cuál es la forma más segura de guardar la Cadena de conexión en la aplicación de Windows Forms?

2

Me acabo de ingresar en una nueva compañía donde desarrollan aplicaciones de Windows Forms usando tecnologías .NET y VB.NET, por supuesto. Utilizan bases de datos SQL Server. El problema GRANDE es que almacenan el texto sin formato de la Cadena de conexión. Esto es obviamente muy peligroso. La aplicación Becuase .NET genera un archivo de configuración dentro de la aplicación y un usuario puede abrir ese archivo en el Bloc de notas. ¿Cuál es la mejor práctica segura para esto? Sí. Podemos almacenar la Cadena de conexión dentro del código, pero a veces la Cadena de conexión podría cambiar.

Gracias por la ayuda.

    
pregunta NathanWay 25.11.2015 - 19:16
fuente

2 respuestas

4

Tienes un par de opciones.

El primero, y preferido, sería establecer una capa de servicios web que la aplicación llame en lugar de ir directamente a la base de datos. Esto, obviamente, va a tomar un poco de tiempo para construir. Sin embargo, esto significaría que podría poner su base de datos detrás de un firewall que solo la capa de servicios web podría atravesar.

El segundo sería usar cifrar la parte de acceso a la base de datos del archivo app.config. Más información aquí: enlace

La tercera opción, que usaría en combinación con las opciones anteriores, sería eliminar todas las consultas directas de SQL de la aplicación y reemplazarlas por llamadas a procs almacenados que requieran un ID de usuario o un parámetro de token de usuario. Luego, cada proceso verificará que el id / token sea válido para la acción dada antes de ejecutarlo. Al mismo tiempo, cambiaría los derechos de la base de datos de modo que solo los procesos almacenados puedan ejecutarse.

Una cuarta opción es implementar SSPI en combinación con usuarios de servidores SQL nombrados (ya sea de directorio activo o de otro tipo). Esto significaría agregar, sin embargo, muchos usuarios (o grupos de usuarios) a su servidor de base de datos. La ventaja es que usted podría controlar de forma individual quién tenía derechos para iniciar sesión en el servidor DB Y no tendría un combo de nombre de usuario / contraseña en el archivo app.config. El inconveniente es que alguien necesita mantener eso.

* Tenga en cuenta que incluso si utiliza secciones de configuración cifradas, el usuario debe tener acceso a la clave de descifrado. Entonces, lo único que esto realmente hace es proteger la clave de las personas que pueden leer el archivo de texto claro app.config. Un usuario determinado con acceso a la computadora en la que se está ejecutando la aplicación todavía podría extraer la información de la cadena de conexión de la memoria de la computadora o descifrar la sección utilizando medios alternativos.

    
respondido por el NotMe 25.11.2015 - 20:33
fuente
0

Paso 1 (Obligatorio): cree un nuevo usuario para SQL Server que tenga el conjunto mínimo de permisos que necesita la aplicación. Si este nuevo usuario es un inicio de sesión de SQL Server o un usuario de dominio de Windows dependerá de la opción que elija a continuación.

La opción más fácil: el nuevo usuario que cree en el Paso 1 puede ser un inicio de sesión de SQL Server. Cifre las partes seguras del archivo de configuración que contienen las credenciales. (por ejemplo, la cadena de conexión).

Mejor opción: el nuevo usuario que creas en el Paso 1 es un usuario de Windows, y asignas permisos para ese usuario a SQL Server mediante la autenticación de Windows. Ahora, cada máquina desde la que se ejecuta la aplicación se puede configurar para ejecutar la aplicación como el nuevo usuario. (Hay varias formas de lograr esto). En el archivo de configuración ahora puede usar Integrated Security para conectarse a SQL Server, lo que significa que no tiene que cifrarlo ya que no se mostrará nada seguro.

Nota: estas opciones están asumiendo que la aplicación WinForms se está ejecutando solo en una red interna de la compañía.

    
respondido por el TTT 25.11.2015 - 20:41
fuente

Lea otras preguntas en las etiquetas