2009-02-17 22 views
13

Me pregunto qué técnicas usa para almacenar las credenciales de la base de datos para su aplicación. Estoy específicamente preocupado con Java Webapps, pero no creo que haya ninguna necesidad de limitar las preguntas a eso.¿Dónde almacenar las credenciales de la base de datos en una aplicación web?

elementos a tener en cuenta:
¿Utiliza archivos de propiedades, configuraciones xml, otros?
¿Está incluido en su aplicación (es decir, en un archivo jar) o almacenado por separado en el sistema de archivos en alguna parte?
¿Está encriptada la contraseña? Si es así, ¿qué esquema de cifrado usas?

Respuesta

5

Con Java, el contenedor debe pasar pools de conexión a la base de datos en webapps. Esto está en el estándar declarable en WEB-INF/web.xml como recursos. Lo mismo se aplica a las sesiones de correo y otros recursos externos que pueden variar de una instalación a otra. Busque JNDI para obtener más información al respecto)

Lo bueno de esto es que a la aplicación no le importa cómo conectarse realmente a algo externo. No verá ninguna contraseña, porque el contenedor las usará.

En tomcat esto se configura desde archivos de contexto (por ejemplo) en conf/Catalina/localhost /, conf/server.xml o, preferiblemente solo para entornos de desarrollo, desde las aplicaciones web META-INF/context.xml. Otros entornos tienen su propia ubicación o aplicación de configuración.

En realidad, el cifrado de las contraseñas depende del contenedor. Tomcat los almacena en texto plano, pero la aplicación en sí no lo verá. No sé sobre la mecánica en otros entornos.

3

Depende del servidor de la aplicación.

Normalmente utilizo búsquedas JNDI para el origen de datos, por lo que las credenciales se almacenan en el servidor de aplicaciones que maneja el grupo de conexiones. No hay necesidad de poner nada más que el nombre JNDI en la configuración de esa manera.

Sí, la contraseña está encriptada en WebLogic.

En Tomcat las cosas pueden ser inciertas. La información de conexión está en META-INF/context.xml, lo que significa texto sin formato para la contraseña. Solo hago eso para el desarrollo, nunca en producción.

8

Dado que está dejando la pregunta abierta a la plataforma, agregaré que las credenciales de la base de datos para las aplicaciones .NET se almacenan en el archivo web.config. Desde la versión 2.0 y superior, hay una sección ConnectionStrings específica que permite un acceso más fácil a la cadena de conexión.

Además de tener IIS bloqueando automáticamente las solicitudes directas al archivo web.config de forma predeterminada, también puede usar un comando IIS para encriptar la sección ConnectionString del archivo web.config. Este cifrado es específico de la máquina, lo que aumenta sus fortalezas, y el tiempo de ejecución de .NET también descifrará la cadena de conexión sobre la marcha cuando usted accede a ella, por lo que no es necesario que la codificación adicional en la aplicación funcione.

4

En la pila de Microsoft, las cosas pueden ser muy buenas.

Crea una cuenta de usuario de red en Active Directory sin casi permisos. Configura IIS para ejecutar su aplicación web como ese usuario. Usted le otorga a ese usuario acceso de lectura a las carpetas y archivos web en el disco. Configura el servidor SQL para otorgarle permisos de lectura/escritura al usuario en las tablas que desee. Y en la cadena de conexión, le ordena al cliente de db que se conecte como la cuenta de usuario con la que se está ejecutando actualmente la aplicación web.

Solo hay una cuenta de usuario real, aunque es visible en varios lugares. Esta cuenta de usuario tiene permisos extremadamente limitados. No hay contraseñas de almacenamiento en cualquier lugar, incluso si están encriptadas. No hay configuración que deba hacerse en el código para que esto funcione (todo se trata de configurar los permisos).

1

En Django, las credenciales están en su archivo de configuración settings.py. Como esto generalmente no se guarda en su árbol de directorios /var/www/, es muy seguro.

Además, una sola aplicación de Django se puede utilizar (y reutilizar) para muchos sitios web o servidores web en el mismo host, cada uno con su propia configuración. Por lo tanto, la configuración settings.py no se incluye con la aplicación, sino que es parte de una única implementación de la aplicación.

1

Para asp.net:

almaceno parámetros globales tales como la cadena de conexión y rutas de repositorios con el registro y luego una referencia a la entrada del registro en el web.config.

La razón principal es que a menudo me parece que tengo que escribir un ejecutable independiente para ejecutar tareas en segundo plano y otras funciones automatizadas que requieren acceso a los mismos parámetros. Por lo tanto, mantener todo lo que es verdaderamente global en un lugar fácilmente accesible hace que la vida sea más fácil.

0

¿Cuáles de estos son buenos lugares para mantener las credenciales de la base de datos de su aplicación web? En un archivo separado en su código fuente En un archivo separado en su host de servidor web En su base de datos Ninguno. Las credenciales de la base de datos nunca deben almacenarse

+0

Entonces, ¿cómo diablos su aplicación se conecta a la base de datos si no hay ningún archivo en el servidor con las credenciales? – thenetimp

Cuestiones relacionadas