2011-02-03 22 views
8

¿Cuáles son las formas de obtener bases de datos y otras contraseñas de servicio fuera de su código? He leído sobre el uso por archivos de propiedades del servidor, pero cuando tienes una gran cantidad de servidores se vuelve difícil de mantener. También he visto una solución usando el proceso de compilación de un CI para "inyectar" contraseñas, pero eso hace que sea difícil actualizar la contraseña sobre la marcha.¿Dónde almacena contraseñas de base de datos?

Algunos de los requisitos para ayudar a reducir el campo de respuestas ...

  1. La contraseña debe ser fácil de cambiar y propagarse en el caso de un fallo de seguridad.
  2. contraseña no puede aparecer en el código (debido al punto 1)
  3. Debería ser "no trivial" para un ser humano para obtener una versión de texto sin formato de la contraseña
  4. debería funcionar bien en la aplicación web y de pie aplicaciones independientes
  5. fácil de adoptar un punto de vista de desarrollador de aplicaciones

Algunos agradable-a-ricos no incluyen la introducción de un único punto de fallo, un tiempo de desarrollo rápido, y fácil de entender.

Esto es similar en espíritu a this question pero con un fuerte énfasis en el mantenimiento y se enfoca más en el caso del lado del servidor.

+0

¿Qué le parece guardarlo en una base de datos? :) –

+0

@Joe: esa fue en realidad una solución propuesta, pero la idea de una contraseña para gobernarlos terminó con esa conversación. –

+0

Al menos solo necesita recordar una contraseña. Puede grabar eso en un CD y guardarlo en una caja fuerte. Entonces solo necesitará recordar la combinación segura. :) – GolezTrol

Respuesta

6

Puede almacenarlo en texto sin formato en un archivo en un directorio protegido que solo puede leer la cuenta en la que se ejecuta la aplicación. En el caso de una aplicación web, siempre debe almacenar la contraseña fuera de la carpeta raíz web.

+0

Bueno, estoy tratando de votar su respuesta, pero el sistema me dice que ya he votado (¿error?). Gracias por su aportación. –

+0

¿Quizás también negativamente downvoted?Debería funcionar ahora, sin embargo. – GolezTrol

1

Si utiliza un grupo de conexiones de base de datos, el nombre de usuario, la contraseña y otros detalles de la base de datos generalmente se gestionan en el contenedor web Java y se presentan en el código Java como un origen de datos. Simplemente solicita una conexión a la base de datos sin tener que conocer ninguno de estos detalles.

+0

Usamos pools de conexión de contenedores, por eso incluí "y otras contraseñas de servicio" ya que también las tenemos. En el caso de java stand alone, no tenemos un buen contenedor para manejar pools de datos para nosotros. –

+0

No creo que los Pools de conexión estén limitados a los servidores web/de aplicaciones; creo que funcionan igual de bien también en los códigos independientes. – trojanfoe

+0

Correcto, pero fuera de un servidor de aplicaciones, la configuración generalmente se encuentra dentro de la aplicación (por favor, demuéstrame que estoy equivocado). También sigue existiendo el problema pendiente de "otros servicios" (piense en FTP) –

0

Además de almacenarlo en un archivo de texto fuera de la raíz web, ¿qué hay de usar el cifrado? En la mayoría de los idiomas, es bastante trivial utilizar un método de encriptación y, aunque puede no ser estrictamente necesario protegerlo de los ataques web, lo hace más difícil para otra persona que pueda obtener acceso al archivo en su sistema. Además, un poco de ofuscación, disfrazando el archivo como algo más con un nombre aburrido que probablemente pasará desapercibido, hace que sea menos probable que alguien lo encuentre incluso en el caso de que tenga acceso físico al servidor.

Cuestiones relacionadas