No se puede conectar a Oracle Database 10g usando un CGI C ++ con httpd 2.2

Estoy escribiendo un programa CGI en C ++. Se supone que se ejecuta en la versión 2.2 del servidor HTTP Apache y necesita conectarse a Oracle Database 10g.

Intenté ejecutar este programa CGI sin httpd y pudo conectarse a la base de datos de Oracle con éxito, pero una vez que lo ejecuté a través del servidor httpd, escribió el siguiente mensaje en error_log.

Error al intentar recuperar el texto del error ORA-12546

¿Como puedó resolver esté problema?

preguntado el 28 de septiembre de 11 a las 04:09

¿Qué sistema operativo estás ejecutando? Si es Linux, ¿tiene SELinux? (Y si es así, ¿hay algo sospechoso en los registros?) ¿Puede iniciar sesión con sqlplus cuando haya iniciado sesión como la cuenta de su servidor web? -

Gracias Sathya, SELinux bloquea el servicio http. Y lo he arreglado de acuerdo con el registro.

2 Respuestas

Eso generalmente significa que ha encontrado un error ORA-12546, pero que su biblioteca cliente no tiene instalados los mensajes de error reales. Eso no es un problema, puede buscar los números de error aquí. En su caso, es "TNS: Permiso denegado".

¿Su usuario CGI tiene permiso para acceder a tnsnames.ora?

Respondido el 28 de Septiembre de 11 a las 13:09

Solo una suposición, pero una causa común de este tipo de cosas es que el entorno ORACLE_HOME no está configurado para su programa CGI. Apache generalmente se inicia en el momento del arranque y, por lo tanto, omite todo el tipo de / etc / profile.

Deberá asegurarse de que ambos ORACLE_HOME está configurado, y dependiendo de la configuración de su sistema, es posible que también necesite LD_LIBRARY_PATH actualizado para incluir $ORACLE_HOME/lib. Necesita su programa para configurar el entorno, o tiene un SetEnv directiva en su configuración de apache. Una forma segura de ver si este es el problema es simplemente escribir un CGI de prueba que vuelque todas las variables de entorno.

Ahora, si el CGI se ejecuta bajo mod_perl es un poco más complicado porque mod_perl tiende a ser bastante anal sobre la seguridad del entorno. Creo que terminamos usando la directiva Perl * Something * Require para configurarlo dentro de perl. Perdón por ser vago, fue hace años ...

Respondido el 28 de Septiembre de 11 a las 20:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.