Conexión de aplicaciones Python mediante mTLS

SE APLICA A: Aplicable Solo Exadata Cloud@Customer

Puede conectar aplicaciones Python a su instancia de base de datos de IA autónoma mediante mTLS.

La conexión de una aplicación de Python con mTLS proporciona una seguridad mejorada para la autenticación y el cifrado, y la seguridad se aplica mediante credenciales de cliente (al proporcionar un nombre de usuario y una contraseña).

El "modo fino" predeterminado del controlador python-oracledb se conecta directamente a Oracle Database. De manera opcional, el controlador puede utilizar las bibliotecas del cliente de Oracle, "Thick mode", para algunas funciones adicionales. Las bibliotecas de clientes de Oracle pueden ser de Oracle Instant Client, de Oracle Client completo o de una instalación de Oracle Database.

Siga estos pasos para conectar la aplicación Python a una instancia de base de datos de IA autónoma mediante mTLS:

  1. Instalación de Python y el controlador python-oracledb
  2. Obtención de credenciales de seguridad (Oracle Wallet) y activación de la conectividad de red
  3. Realice este paso si solo desea conectarse en modo Thin: Ejecute la aplicación Python con el modo Thin oracledb de python (mTLS)
  4. Realice este paso si desea conectarse en modo grueso: Ejecute la aplicación Python con el modo grueso de python-oracledb (mTLS)

Instalación de Python y el controlador python-oracledb

Para conectarse a Autonomous AI Database desde su aplicación Python, instale Python y el controlador python-oracledb.

  1. Instale Python 3, si aún no está disponible.

    La versión de Python que utilice depende del sistema operativo y el hardware del cliente. Por ejemplo, Windows, Linux, macOS y otros.

    Nota: Oracle recomienda mantenerse al día con las versiones de controladores Python y python-oracledb.

  2. Instale el controlador python-oracledb desde PyPI.

    El controlador python-oracledb es un módulo de extensión de lenguaje de programación Python que permite a los programas Python conectarse a Oracle Database. El controlador python-oracledb es la nueva versión principal renombrada del popular controlador cx_Oracle.

    Versiones admitidas del controlador python-oracledb: python-oracledb 1.0 (o posterior)

    Ejecute el siguiente comando para actualizar python:

     python -m pip install oracledb --upgrade
    

    Deberá ver una salida similar a la siguiente:

     Collecting oracledb
       Downloading oracledb-1.0.3-cp310-cp310-win_amd64.whl (1.0 MB)
    
          ---------------------------------------- 1.0/1.0 MB 1.8 MB/s eta 0:00:00
     Collecting cryptography>=3.4
       Downloading cryptography-37.0.4-cp36-abi3-win_amd64.whl (2.4 MB)
    
          ---------------------------------------- 2.4/2.4 MB 3.5 MB/s eta 0:00:00
     Collecting cffi>=1.12
       Downloading cffi-1.15.1-cp310-cp310-win_amd64.whl (179 kB)
    
          ---------------------------------------- 179.1/179.1 kB 5.4 MB/s eta 0:00:00
     Collecting pycparser
       Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
    
          ---------------------------------------- 118.7/118.7 kB 7.2 MB/s eta 0:00:00
     Installing collected packages: pycparser, cffi, cryptography, oracledb
     Successfully installed cffi-1.15.1 cryptography-37.0.4 oracledb-1.0.3 pycparser-2.21
    

    Notas para la instalación de python-oracledb:

    • Si está detrás de un proxy, utilice la opción --proxy para agregar un servidor proxy al comando. Por ejemplo:

      python -m pip install oracledb --upgrade --proxy=http://proxy.example.com:80
      
    • En el caso de que no tenga permiso para escribir en directorios del sistema, incluya la opción --user. Por ejemplo:

      python -m pip install oracledb --upgrade --user
      
    • Si un paquete binario no está disponible para su plataforma, al ejecutar pip, se descargará el paquete de origen. El origen se compila y se instala el binario resultante.

    Consulte Installing python-oracledb para obtener opciones y consejos adicionales.

  3. Si desea utilizar el controlador python-oracledb en modo grueso, instale el software del cliente de Oracle.

    Por defecto, python-oracledb se ejecuta en modo Thin, que se conecta directamente a Oracle Database. El modo Thin no necesita bibliotecas de cliente de Oracle. Sin embargo, algunas funcionalidades adicionales están disponibles cuando python-oracledb se ejecuta en modo grueso.

    Nota: Consulte Funciones de Oracle Database soportadas por python-oracledb para obtener información sobre las funciones soportadas en los modos Thin y Thick de python-oracledb. No todas las funciones que se muestran en este enlace están disponibles con Autonomous AI Database.

    Python-oracledb utiliza el modo Thick cuando se utilizan las bibliotecas de Oracle Instant Client o las bibliotecas de Oracle Database Client y se llama a oracledb.init_oracle_client() en el código Python.

    Al instalar el software de cliente de Oracle, existen diferencias en las versiones mínimas necesarias para las conexiones mTLS y TLS, de la siguiente manera:

    • Conexiones mutuas de TLS (mTLS):

      • Si la base de datos está en un equipo remoto, descargue el paquete gratuito de Oracle Instant Client 'Basic' o 'Basic Light' para la arquitectura de su sistema operativo. Utilice una versión admitida: Oracle Instant Client: 18.19 (o posterior), 19.2 (o posterior) o 21 (versión base o posterior).

      • También puede utilizar las bibliotecas de cliente de Oracle Database completas cuando estén disponibles en el sistema (incluido el cliente de Oracle Database completo: Oracle Database Client: 18.19 (o posterior), 19.2 (o posterior) o 21 (versión base o posterior).

    • Conexiones TLS: los clientes de Oracle Call Interface (OCI) soportan la autenticación TLS si utiliza las siguientes versiones de cliente:

      • Oracle Instant Client/Oracle Database Client 19.14 (o posterior) y 21.5 (o posterior): todas las plataformas

      • También puede utilizar las bibliotecas de cliente de Oracle Database completas cuando estén disponibles en el sistema, incluido el cliente de Oracle Database completo 19.14 (o posterior) y 21.5 (o posterior).

Obtención de credenciales de seguridad (Oracle Wallet) y activación de la conectividad de red

Obtenga credenciales para conectarse a una instancia de base de datos de IA autónoma.

  1. Descargue un archivo de cartera de la instancia de la base de datos de IA autónoma para obtener un archivo zip que contenga las credenciales de seguridad del cliente y los valores de configuración de red necesarios para acceder a una instancia de la base de datos de IA autónoma.

    Obtenga las credenciales de seguridad del cliente (archivo wallet.zip):

    • Usuario ADMIN: en la consola de Oracle Cloud Infrastructure, haga clic en Conexión de base de datos. Consulte Descarga de credenciales de cliente (carteras).

    • Otro usuario (no administrativo): obtenga Oracle Wallet del administrador para su instancia de base de datos de IA autónoma.

      Nota: Proteja el archivo wallet.zip y su contenido para evitar el acceso no autorizado a la base de datos.

  2. Descomprima el archivo de credenciales de cliente (wallet.zip).

Ejecución de la aplicación Python con el modo delgado python-oracledb (mTLS)

Por defecto, python-oracledb utiliza el modo Thin para conectarse directamente a su instancia de base de datos de IA autónoma.

En el modo Thin solo se necesitan dos archivos del zip de cartera:

Para conectarse en modo Thin:

  1. Mueva los archivos tnsnames.ora y ewallet.pem a una ubicación del sistema.

    Linux

    En Linux, por ejemplo:

     /opt/OracleCloud/MYDB
    

    Windows

    Por ejemplo en Windows:

     C:\opt\OracleCloud\MYDB
    
  2. En la aplicación Python, defina los siguientes parámetros de conexión para conectarse a una instancia de base de datos de IA autónoma:

    • config_dir: especifica el directorio que contiene tnsnames.ora.

    • dsn: se utiliza para especificar el alias de red deseado del archivo tnsnames.ora.

    • password: especifica la contraseña de usuario de la base de datos.

    • user: especifica el usuario de la base de datos.

    • wallet_location: especifica el directorio que contiene el archivo PEM (ewallet.pem).

    • wallet_password: especifica la contraseña para el archivo PEM (ewallet.pem). Esta contraseña se define al descargar el archivo wallet.zip.

    Linux

    Por ejemplo, en Linux para conectarse como usuario ADMIN mediante oracledb.connect con el nombre de servicio de red db2024_low (el nombre de servicio se encuentra en tnsnames.ora):

     connection=oracledb.connect(
          config_dir="/opt/OracleCloud/MYDB",
          user="admin",
          password=password,
          dsn="db2024_low",
          wallet_location="/opt/OracleCloud/MYDB",
          wallet_password=wallet_pw)
    

    Windows

    Por ejemplo, en Windows para conectarse como usuario ADMIN mediante oracledb.connect con el nombre de servicio de red db2024_low (el nombre de servicio se encuentra en tnsnames.ora):

     connection=oracledb.connect(
          config_dir=r"C:\opt\OracleCloud\MYDB",
          user="admin",
          password=password,
          dsn="db2024_low",
          wallet_location=r"C:\opt\OracleCloud\MYDB",
          wallet_password=wallet_pw)
    

    El uso de una cadena 'raw' r"..." significa que las barras invertidas se tratan como separadores de directorio.

    Como se muestra en este ejemplo, wallet_location y config_dir se definen en el mismo directorio (y el directorio contiene tnsnames.ora y ewallet.pem). No es necesario especificar el mismo directorio para estos archivos.

Si está detrás de un firewall, puede establecer un túnel de las conexiones TLS/SSL a través de un proxy mediante HTTPS_PROXY en el descriptor de conexión o mediante la definición de atributos de conexión. La conexión correcta depende de configuraciones de proxy específicas. Oracle no recomienda utilizar un proxy en un entorno de producción, debido al posible impacto en el rendimiento. Consulte HTTPS_PROXY en Referencia de servicios de red de base de datos de Oracle Database 19c u Referencia de servicios de red de base de datos de Oracle Database 26ai para obtener más información.

En el modo Thin puede especificar un proxy agregando los parámetros https_proxy y http_proxy_port.

Por ejemplo, en Linux:

connection=oracledb.connect(
     config_dir="/opt/OracleCloud/MYDB",
     user="admin",
     password=password,
     dsn="db2024_low",
     wallet_location="/opt/OracleCloud/MYDB",
     wallet_password=wallet_pw,
     https_proxy='myproxy.example.com',
     https_proxy_port=80)

Por ejemplo, en Windows:

connection=oracledb.connect(
     config_dir=r"C:\opt\OracleCloud\MYDB",
     user="admin",
     password=password,
     dsn="db2024_low",
     wallet_location=r"C:\opt\OracleCloud\MYDB",
     wallet_password=wallet_pw,
     https_proxy='myproxy.example.com',
     https_proxy_port=80)

Ejecución de la aplicación Python con el modo grueso python-oracledb (mTLS)

Por defecto, python-oracledb se ejecuta en modo Thin, que se conecta directamente a Oracle Database. Las funciones adicionales de python-oracledb están disponibles cuando el controlador se ejecuta en modo grueso.

Nota: El modo grueso requiere que las bibliotecas del cliente de Oracle estén instaladas donde se ejecuta Python. También debe llamar a oracledb.init_oracle_client() en el código Python.

En el modo Thick se necesitan los tres archivos siguientes del archivo zip de cartera:

Para conectarse en modo grueso:

  1. Coloque los archivos tnsnames.ora, sqlnet.ora y cwallet.sso en el sistema.

    Utilice una de las dos opciones para colocar estos archivos en el sistema:

    • Si va a utilizar Instant Client, mueva los archivos a una jerarquía de subdirectorio network/admin en el directorio Instant Client. Por ejemplo, en función de la arquitectura o del sistema cliente y donde haya instalado Instant Client, los archivos deben estar en una ubicación de directorio, como:

      /home/myuser/instantclient_19_21/network/admin
      

      o bien,

      /usr/lib/oracle/19.21/client64/lib/network/admin
      

      Por ejemplo, en Linux, si utiliza el cliente de Oracle completo, mueva los archivos a $ORACLE_HOME/network/admin.

    • También puede mover los archivos a cualquier directorio accesible.

      Por ejemplo, en Linux, mueva los archivos al directorio /opt/OracleCloud/MYDB y edite sqlnet.ora para cambiar el directorio de ubicación de cartera al directorio que contiene el archivo cwallet.sso.

      Por ejemplo, en Linux edite sqlnet.ora de la siguiente manera:

      WALLET_LOCATION = (SOURCE = (METHOD=file) (METHOD_DATA = (DIRECTORY="/opt/OracleCloud/MYDB")))
      SSL_SERVER_DN_MATCH=yes
      

      Cuando los archivos de configuración no están en la ubicación por defecto, la aplicación debe indicar dónde están, ya sea con el parámetro config_dir en la llamada oracledb.init_oracle_client() o definiendo la variable de entorno TNS_ADMIN.

      Nota: Ninguno de estos valores es necesario y no necesita editar sqlnet.ora si coloca todos los archivos de configuración en el directorio network/admin.

  2. En la aplicación Python, defina los siguientes parámetros de inicialización y conexión para conectarse a la instancia de la base de datos de IA autónoma:

    • config_dir: especifica el directorio de configuración al colocar los archivos de configuración. Esto sólo es necesario cuando los archivos de configuración se colocan en un directorio fuera del directorio de configuración del cliente instantáneo network/admin.

    • dsn: especifica el alias de red deseado del archivo tnsnames.ora.

    • password: especifica la contraseña de usuario de la base de datos.

    • user: especifica el usuario de la base de datos.

    En el primer caso para la ubicación de los archivos de configuración, conéctese a la instancia de base de datos de IA autónoma mediante las credenciales de la base de datos definiendo el parámetro dsn en el alias de red deseado de tnsnames.ora.

    Por ejemplo, para conectarse como usuario ADMIN mediante oracledb.init_oracle_client y conectarse con el nombre de servicio de red db2024_low (donde el nombre de servicio se encuentra en tnsnames.ora):

     oracledb.init_oracle_client()
        connection=oracledb.connect(
            user="admin",
            password=password,
            dsn="db2024_low")
    

    Cuando los archivos de configuración están en un directorio fuera del directorio de configuración del cliente instantáneo, defina el parámetro config_dir al llamar a oracledb.init_oracle_client.

    Linux

    Por ejemplo, en Linux para conectarse como usuario ADMIN mediante el nombre de servicio de red db2024_low:

     oracledb.init_oracle_client(config_dir="/opt/OracleCloud/MYDB")
        connection=oracledb.connect(
           user="admin",
           password=password,
           dsn="db2024_low")
    

    Windows

    Por ejemplo, en Windows para conectarse como usuario ADMIN mediante el nombre de servicio de red db2024_low:

     oracledb.init_oracle_client(config_dir=r"C:\opt\OracleCloud\MYDB")
        connection=oracledb.connect(
           user="admin",
           password=password,
           dsn="db2024_low")
    

    El uso de una cadena 'raw' r"..." significa que las barras invertidas se tratan como separadores de directorio.

Si está detrás de un firewall, puede establecer un túnel de las conexiones TLS/SSL a través de un proxy mediante HTTPS_PROXY en el descriptor de conexión o mediante la definición de atributos de conexión. La conexión correcta depende de configuraciones de proxy específicas. Oracle no recomienda utilizar un proxy en un entorno de producción, debido al posible impacto en el rendimiento. Consulte HTTPS_PROXY en Referencia de servicios de red de base de datos de Oracle Database 19c u Referencia de servicios de red de base de datos de Oracle Database 26ai para obtener más información.

En el modo Thick puede especificar un proxy editando el archivo sqlnet.ora y agregando una línea:

SQLNET.USE_HTTPS_PROXY=on

Además, edite tnsnames.ora y agregue un nombre de proxy HTTPS_PROXY y un puerto HTTPS_PROXY_PORT a la lista de direcciones de descriptor de conexión de cualquier nombre de servicio que desee utilizar.

Por ejemplo:

mydb_high=(description=
(address=(https_proxy=myproxy.example.com)
(https_proxy_port=80)
(protocol=tcps)(port=1522)(host=...)

Consulte Enabling python-oracledb Thick mode para obtener información sobre el modo Thick.

Contenido relacionado

Acerca de la conexión a una base de datos de IA autónoma dedicada