Tenemos algunos datos:
- Los desarrolladores necesitan una réplica de la base de datos de producción en sus máquinas.
- Los desarrolladores tienen la contraseña de dicha base de datos en los archivos App.config.
- No queremos que los datos de dicha base de datos se vean comprometidos.
Algunas soluciones sugeridas y sus inconvenientes:
- Cifrado de disco completo. Esto resuelve todos los problemas, pero degrada el rendimiento de la computadora portátil, y somos una nueva empresa, por lo que no tenemos dinero para caballos de batalla.
- Crear una máquina virtual con disco duro encriptado y almacenar la base de datos en ella. Funciona bien, pero no ayuda demasiado, ya que hay una contraseña en Web.Config.
- Solución número 2 + que requiere que el desarrollador escriba la contraseña de la base de datos cada vez que ejecuta algo. Resuelve todos los problemas, pero es realmente engorroso para los desarrolladores que a veces inician la aplicación varias veces por minuto. Además, tenemos múltiples aplicaciones que se conectan a la misma base de datos, y la implementación de una pantalla de contraseña tendrá que diferir en cada una.
Entonces, mi pregunta es, si hay alguna solución común a dicho problema, o alguna sugerencia sobre cómo hacer que cualquiera de las soluciones anteriores sea viable.
Respuestas:
No solo no desea una copia de la base de datos de producción, sino que en realidad puede ser ilegal. Por ejemplo, en los EE. UU., No puede mover los datos de producción fuera del entorno de producción si contienen información regulada, como datos de salud personal, datos financieros o incluso datos que podrían usarse en el robo de identidad. Si lo hace, podría recibir una multa, perder su posición de cumplimiento y, por lo tanto, estar sujeto a auditorías más agresivas, o incluso ser nombrado en una demanda.
Si necesita datos a escala de producción para las pruebas, tiene un par de opciones:
Para la opción # 2
fuente
¿Al menos puede darles a los desarrolladores máquinas virtuales en su centro de datos en las que puedan utilizar RD para este trabajo? Si bien realmente deberían estar funcionando a partir de datos que no son de producción, esto sería más seguro hasta que pueda llegar allí, ya que los datos no se almacenarían en computadoras portátiles fácilmente robadas.
fuente
Cambia tu forma de trabajar si es posible.
Como otros han señalado:
Ambos lo exponen a un riesgo significativo y deben cambiarse si es posible. Al menos, debe evaluar seriamente cuál sería el costo de realizar estos cambios. Si esta es una dependencia externa que no tiene poder para cambiar, considere plantear esto como una preocupación para quien tenga ese poder.
Sin embargo, en el mundo real, puede que realmente no sea posible cambiar esto. Suponiendo que lo que está haciendo es legal, es posible que tenga que vivir con este acuerdo (al menos temporalmente).
Si esto es realmente necesario, solo necesita hacer cifrado de disco completo.
Dados los riesgos, debe utilizar la mejor opción de seguridad disponible, y esta es la opción. Si hay un éxito en el rendimiento, vive con él. Es un costo de trabajar con datos confidenciales.
Si fuera su cliente, no me impresionaría que decidiera no utilizar la mejor opción de seguridad disponible con mis datos, ya que esto hizo que sus computadoras portátiles fueran un poco más lentas.
fuente
La respuesta de Corbin March es bastante buena, solo agregaré un detalle adicional, que generalmente tiene dos clases de datos en su base de datos de producción: metadatos del sistema / aplicación; y datos de usuario del cliente / datos transaccionales. Este último NUNCA debe usarse en un entorno de desarrollo "tal como está".
De hecho, es muy raro que necesite información real del cliente de producción para realizar el desarrollo.
Sin embargo, si el problema que el OP está describiendo aquí involucra datos de secretos comerciales o de otro modo datos del sistema altamente patentados que no involucran datos de clientes, eso es requerido por los desarrolladores ... el enfoque de seguridad debe involucrar un esquema que no tenga la contraseña de db se mantiene en texto sin formato en un archivo de recursos en alguna parte. Debe haber un mecanismo para, por ejemplo, regenerar una contraseña diaria, que no esté almacenada en el disco.
fuente
client user data/transactional data... should NEVER be used in a development environment "as is."
- Esto me parece inviable. Los problemas de programación relacionados con la producción que tienen que ver con los datos de un cliente específico no podrían resolverse bajo este acuerdo. Además, los datos reales en vivo son extremadamente útiles desde el punto de vista de las pruebas. El esfuerzo de privatización o anonimización debe centrarse únicamente en los datos que están específicamente regulados.No indica qué base de datos y qué entorno.
Si puede utilizar la seguridad integrada, entonces no se puede acceder a la base de datos sin iniciar sesión como ese usuario. Sí, si los datos están en el disco duro, pueden ser pirateados, pero esta es una defensa de primer nivel.
App.config me hace pensar que puede ser un .NET. Ponga config en una memoria USB y léalo desde la memoria USB. Si la unidad no está presente, haga que el usuario escriba la contraseña.
¿Hay alguna manera de almacenar la contraseña en la memoria la primera vez que todos la ingresan y leen? Nuevamente, no declaras el medio ambiente. Archivos mapeados en memoria
Con algunos TDE puede almacenar la clave en un dispositivo separado para que solo suministren la clave cuando se inicie el servidor de la base de datos.
fuente
Una opción posible es hacer una copia de la base de datos y eliminar esa copia con un script para que termine con datos diferentes de los que realmente están en producción. No terminará con los mismos datos que la producción, pero tendrá la misma escala.
fuente