2012-02-22 5 views
7

Con el fin de demostrar la característica de seguridad de Oracle uno tiene que llamar OCIServerVersion() o OCIServerRelease() cuando aún no se ha establecido la sesión del usuario.pitón cx_Oracle y servidor de información

Teniendo el parámetro de base de datos sec_return_server_release_banner = false. Estoy usando el módulo Python cx_Oracle para esto, pero no estoy seguro de cómo obtener la versión del servidor antes de establecer la conexión. ¿Algunas ideas?

+1

cxOracle no usa las funciones OCI para obtener la versión pero llama a dbms_utility.db_version después de la conexión, así que creo que no puede hacerlo sin un usuario que tenga permiso de ejecución en el procedimiento dbms_utility.db_version, puede intentar eludir cxoracle jugando directamente con el cliente OCI usar ctypes (cxoracle en pypy usa ctypes) – sherpya

+0

la función de conexión es Connection_Connect en Connection.c llama a OCIServerAttach() pero no hay formas de llamar a otra cosa antes de auth – sherpya

+1

https://bitbucket.org/pypy/pypy/src/ default/pypy/module/oracle/interp_connect.py es rpython debes llamar a OCIServerVersion() después de serverattach, pero no sé qué tan fácil se puede portar a cpython + ctypes – sherpya

Respuesta

0

Depende de su arquitectura SW y su intención de estar listo para la plataforma cruzada.

cx_Oracle depende del cliente de Oracle. Entonces, está seguro de que hay un cliente Oracle en la ruta conocida. Incluso si no desea utilizar el cliente de Oracle para la sesión normal, puede usarlo para la verificación preliminar del servidor.

en Linux/Unix podría ejecutar en el subproceso siguiente código:

sqlplus user/[email protected] <<< "quit"| grep "Oracle Database"| head -n 1 

Grep y otros procesos se podrían hacer en el código y en Windows es necesario. Con el código obtendrá la versión de Oracle y sabrá si la información de conexión es correcta.

+0

Esto supone que sqlplus está instalado. Oracle Instantclient (que solo proporciona OCI y, por lo tanto, es suficiente por sí solo para cxOracle) no viene de manera predeterminada con sqlplus. – cowbert

0

Sin establecer una conexión ,. No, nunca puedes preguntar nada. Es como ir a la Página de Google. (Arquitectura de Internet - si la llama sesión o sesión)

En cuanto a Authentical, si no se establece ningún permiso, Oracle usa un nombre de usuario 'nobody' como usuario y así le da a cada usuario sesión.

Soy un usuario de Oracle APEX, y uso Python, PLSQL regurlary.

Esa es una buena pregunta. Gracias.