¿Cuál es el mejor método para almacenar el host SQL, el nombre de usuario y la contraseña para múltiples bases de datos?

1

Tengo un proyecto grande que tiene varios servidores web (uno para cada cliente), una aplicación (para todos los clientes) y varias bases de datos SQL (una para cada cliente) como se muestra a continuación.

.

Por razones de seguridad, necesito tener contraseñas y nombres de usuario separados. ¿Cómo puedo almacenar de forma segura las contraseñas de los servidores SQL en el servidor de aplicaciones? ¿Puedo cifrar el host, el nombre de usuario y la contraseña y mantener la clave en el servidor de la aplicación, o sería mejor almacenar las contraseñas encriptadas en otro servidor SQL? ¿Y dónde debería guardarse la clave de cifrado?

    
pregunta Trevor 02.01.2017 - 17:46
fuente

2 respuestas

1

Primero debe asegurarse de no estar enfrentando un problema x-y, ya que tener una base de datos por usuario detrás de la misma aplicación no es el diseño más común. Es mucho más común compartir la base de datos y dejar que la aplicación implemente la separación de usuarios. Entre otras ventajas, tiene una única conexión de base de datos, que facilita enormemente la escalabilidad y el mantenimiento de la base de datos.

Si realmente necesita ese diseño, mi opción preferida sería dejar la responsabilidad de la contraseña a los usuarios. Si es una opción, la contraseña de la base de datos podría ser simplemente la contraseña del usuario web. De esa manera, ni siquiera tiene que almacenarlo y simplemente crear la conexión de la base de datos en el momento del inicio de sesión y cerrarla al cerrar la sesión (o al final de la sesión web). Alternativamente, podría obtener una clave de cada contraseña web individual y utilizarla para cifrar la contraseña de la base de datos para cada usuario si desea mantenerlos separados = > el resultado es el mismo, necesita la contraseña web que no almacena para acceder a la base de datos

Si ninguna de estas opciones es aceptable, deberá almacenar las contraseñas en forma invertible en el servidor de la aplicación, pero es una pesadilla de seguridad. Sus opciones son:

  • no importa en absoluto: almacene las contraseñas en texto claro y ore para que nadie tenga acceso a esos datos; sorprendentemente, es una opción demasiado común (*) ...
  • no me importa mucho: igual que arriba, pero encripta las contraseñas con una clave fija codificada en la aplicación, un poco mejor porque el atacante ahora necesita dos elementos, pero uno de ellos nunca puede cambiar
  • haz tu mejor esfuerzo: encripta las contraseñas con una clave modificable. Puede leerse desde el entorno en el momento del arranque y cambiarse en una base regular, por ejemplo, cada mes, por ejemplo. Pero eso significa que al cambiar la contraseña maestra, también debe cambiar todas las contraseñas de la base de datos de forma atómica. De acuerdo, cualquier base de datos puede hacerlo, pero beuhhh ... Alternativamente, puede imitar las bóvedas de contraseñas y cifrar un archivo completo al costo que el acceso a una contraseña individual requerirá un descifrado completo a menos que acepte mantener la base de datos completa en texto sin cifrar en la memoria.

(*) ... pero puede ser una opción aceptable si el servidor de aplicaciones y los servidores de base de datos están en la misma zona de seguridad .

    
respondido por el Serge Ballesta 02.01.2017 - 18:42
fuente
0

¿Por qué no considera almacenar las credenciales en el propio servidor web (clientes)? El servidor de aplicaciones actuará como una interfaz de reenvío del servidor al cliente. Además, evitará que el servidor de aplicaciones sea un punto único de falla en caso de que el host se apague o incluso en caso de una intrusión. Esto ayudaría a liberar el servidor de aplicaciones de la administración de claves y transferirlo al cliente, si no hay una intención de administración de claves en el servidor de aplicaciones.

    
respondido por el swatilaxmi28 02.01.2017 - 18:52
fuente

Lea otras preguntas en las etiquetas