Almacenando la contraseña de la base de datos en la aplicación

1

Digamos que mi aplicación se conecta a mi base de datos. Esto requiere que tenga el nombre de usuario y la base de datos en mi configuración de la siguiente manera:

postgresql://scott:tiger@localhost/mydatabase

Tengo una implementación automatizada para configurar esto y no quiero almacenar la base de datos tanto en la aplicación como en mi script de implementación. Por lo tanto mis opciones como las veo son:

  • Asegúrese de que postgresql no esté protegido con una contraseña y de otra manera
  • Haga que el script de implementación genere un pase aleatorio y pídale que lo agregue tanto a postgresl como al archivo de configuración

¿Alguien puede ayudarme a entender cómo abordarían esto desde un punto de vista de seguridad, por favor?

    
pregunta Jimmy 09.03.2014 - 12:58
fuente

2 respuestas

2

Esto realmente suena como un caso de uso bastante decente para el soporte TLS de PostgreSQL. Puede configurar un certificado de cliente de confianza para que la aplicación lo use con su script de implementación y luego obtener las otras ventajas de no tener un secreto compartido, además de un cifrado obvio (a menos que su aplicación ya esté vinculada a la CPU, en cuyo caso, la selección del cifrado NULL es una posible solución). A veces, agregar TLS complica las cosas, pero parece que en este caso podría simplificarlas.

enlace

El inicio de sesión de TLS puede agregar unos pocos milisegundos de latencia, pero si ya estás administrando un grupo de conexiones, no sospecho que la aplicación lo notaría.

    
respondido por el Bill McGonigle 30.03.2014 - 06:11
fuente
0

Postgres le permite tener ciertos usuarios para conectarse desde una IP particular sin proporcionar una contraseña. Esto se puede hacer usando el archivo pg_hba.conf usando el siguiente formato:

host       database  user  address  auth-method  [auth-options]

(Tomado de la documentación de Postgres)

Otra alternativa, y quizás una más segura, sería usar variables de entorno (suponiendo que estés en un sistema similar a Linux):

(desde su shell, que se puede cargar en un archivo .profile o .login):

export DB_USER='scott'
export DB_PASS='tiger'

Y luego en su script, simplemente puede hacer:

postgresql://$DB_USER:$DB_PASS@localhost/mydatabase

o ENV ['DB_USER'], $ _ENV ['DB_USER'], dependiendo del idioma que uses.

Esto le permite "compartir" su código, sin que se exponga ninguna información confidencial. Incluso puede ayudarlo a poner su nombre de host DB y su nombre DB en variables.

    
respondido por el ndrix 11.03.2014 - 06:34
fuente

Lea otras preguntas en las etiquetas