
Estoy buscando una manera de almacenar una contraseña de base de datos en la máquina en funcionamiento para que mi propia aplicación pueda leerla (para conectarme a la base de datos) pero un usuario sin derechos de administración no pueda leerla. Un administrador debe poder cambiar la contraseña, preferiblemente de forma automática.
Lo que tengo en mente es algo así comoArchivo .pgpass para PostgreSQLen un entorno Linux. ¿Es esto posible también en un entorno Windows?
Creo que solo los administradores pueden acceder al archivo de contraseña. Pero, ¿puede un programa ejecutable para el usuario acceder también a este archivo? Además, ¿es posible con la ayuda de políticas de grupo distribuir dicho archivo a través de la red?
Otras soluciones en las que estoy pensando (probablemente con más esfuerzo):
- Cifre el archivo de contraseña. Sólo la aplicación y los administradores tienen las claves válidas para descifrar y cambiar/leer el archivo.
- Recupere la contraseña de un recurso de red, presumiblemente también cifrada.
Respuesta1
En respuesta a su pregunta sobre el acceso de administrador únicamente,
Windows ejecuta servicios con los permisos del usuario (a menos que los ejecute específicamente como administrador o como usuario diferente), por lo que si el usuario no tiene acceso a un archivo, el programa tampoco lo tendrá.
En respuesta a la pregunta de política de grupo:
Sí, puede utilizar la política de grupo para distribuir archivos a través de las Preferencias de política de grupo. (Ver:https://www.adamfowlerit.com/2016/07/group-policy-preferences-replace-existing-file/)
Respuesta2
Si alguien está interesado: se me ocurrió la siguiente solución.
La contraseña se almacena cifrada en un archivo XML (el "contenedor de contraseñas"). El contenedor se puede abrir y editar con una contraseña de administrador. El cifrado es simétrico. El contenedor se coloca en un recurso de red, simplemente dentro de un directorio de red.
La aplicación recibe la ubicación del contenedor de contraseñas y puede abrir el contenedor de contraseñas porque la contraseña del administrador está depositada en el código.
Sé que esta solución no es 100% segura porque las contraseñas no deben almacenarse en el código. Sin embargo, para estos requisitos (la contraseña de la base de datos debe estar oculta para el usuario, la contraseña de la base de datos debe ser administrable), la solución es suficientemente buena.