Pregunta

Estamos ejecutando parte de nuestra aplicación como un servicio de Windows y es necesario que pueda acceder a los DSN para importar a través de ODBC. Sin embargo, parece que se han encontrado muchas restricciones a través de prueba y error a qué DSN puede acceder. Por ejemplo parece que no puede 1. Acceda a un DSN del sistema a menos que la cuenta que ejecuta el servicio tenga privilegios de administrador. (Recibo un error de Acceso denegado, cuando intento conectarme) 2. acceder a un DSN de usuario que fue creado por un usuario diferente (este es comprensible). 3. acceder a un archivo DSN a través de la red

He leído que el propósito de un DSN de archivo es permitir que otras computadoras lo usen para conectarse, sin embargo, parece que no puedo hacer que funcione.

Alguien sabe, o sabe dónde puedo averiguar cuáles son todas las reglas y restricciones para acceder a un DSN al usar un servicio de Windows. gracias

¿Fue útil?

Solución

Esto está en algún lugar entre su # 1 y # 2: a veces también son necesarios los permisos de archivo correctos. Una vez tuve problemas en una máquina Vista que se conectaba a un DSN de DB2 porque, por alguna razón (tal vez para escribir archivos temporales; aunque no sé por qué haría algo así en esta ubicación en lugar de uno específico del usuario) , el controlador necesitaba acceso de escritura al directorio donde IBM había instalado los archivos binarios y las bibliotecas del cliente, lo que había hecho un Administrador y estaba en la raíz de la unidad C

Otros consejos

Creo que ya has descubierto las tres reglas principales. :-)

Excepto que probablemente no necesite privilegios de administrador para su cuenta de servicio. IANANA (no soy un administrador de red), pero su cuenta de servicio probablemente solo necesite acceso de lectura a uno de los directorios o archivos ODBC.

No puede conectarse a unidades asignadas con un servicio. Una unidad asignada tiene que interactuar con la memoria llamada el montón de escritorio que rastrea los iconos en el escritorio. Los servicios no tienen acceso a esa memoria. Si tiene que usar un dsn cree un systemdsn. mejor sería usar una cadena de conexión y almacenarla en app.config y usar la api de cifrado para cifrar el nombre de usuario y la contraseña.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top