Connexion d'applications Python à l'aide de l'authentification mTLS

S'APPLIQUE À : Applicable Exadata Cloud@Customer uniquement

Vous pouvez connecter des applications Python à votre instance Autonomous Database à l'aide de mTLS.

La connexion d'une application Python avec mTLS fournit une sécurité améliorée pour l'authentification et le cryptage. La sécurité est assurée à l'aide des informations d'identification client (en indiquant un nom utilisateur et un mot de passe).

Le mode léger par défaut du pilote python-oracledb se connecte directement à Oracle Database. Le pilote peut éventuellement utiliser les bibliothèques client Oracle, en mode Lourd, pour des fonctionnalités supplémentaires. Les bibliothèques client Oracle peuvent provenir d'Oracle Instant Client, du client Oracle complet ou d'une installation Oracle Database.

Pour connecter votre application Python à une instance Autonomous Database à l'aide de mTLS, procédez comme suit :

  1. Installation de Python et du pilote python-oracledb
  2. Obtention des informations d'identification de sécurité (portefeuille Oracle) et activation de la connectivité réseau
  3. Effectuez cette étape uniquement si vous voulez vous connecter en mode Léger : Exécution d'une application Python à l'aide du mode Léger de python-oracledb
  4. Pour vous connecter en mode Lourd, procédez comme suit : Exécution d'une application Python à l'aide du mode Lourd de python-oracledb

Installation de Python et du pilote python-oracledb

Pour vous connecter à Autonomous Database à partir de votre application Python, installez Python et le pilote python-oracledb.

  1. Installez Python 3, s'il n'est pas déjà disponible.

    La version de Python que vous utilisez dépend du système d'exploitation et du matériel côté client. Par exemple, Windows, Linux, macOS et autres.

    Remarques :

    Oracle vous recommande de rester à jour avec les versions de pilote Python et python-oracledb.
  2. Installez le pilote python-oracledb à partir de PyPI.

    Le pilote python-oracledb est un module d'extension du langage de programmation Python permettant aux programmes Python de se connecter à Oracle Database. Le pilote python-oracledb est la nouvelle version majeure du pilote cx_Oracle.

    Versions de pilote python-oracledb prises en charge : python-oracledb 1.0 (ou version ultérieure)

    Exécutez la commande suivante pour mettre à niveau Python :

    python -m pip install oracledb --upgrade

    La sortie doit se présenter comme suit :

    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

    Remarques relatives à l'installation de python-oracledb :

    • Si vous êtes derrière un proxy, utilisez l'option --proxy pour ajouter un serveur proxy à la commande. Exemple :

      python -m pip install oracledb --upgrade --proxy=http://proxy.example.com:80
    • Dans le cas où vous ne disposez pas des droits d'accès permettant d'écrire dans les répertoires système, incluez l'option --user. Exemple :

      python -m pip install oracledb --upgrade --user
    • Si aucun package binaire n'est disponible pour votre plate-forme, l'exécution de pip télécharge le package source à la place. La source est compilée et le fichier binaire résultant est installé.

    Pour des options et des conseils supplémentaires, reportez-vous à Installation de python-oracledb.

  3. Si vous voulez utiliser le pilote python-oracledb en mode Lourd, installez le logiciel client Oracle.

    Par défaut, python-oracledb s'exécute en mode Léger, qui se connecte directement à Oracle Database. Le mode Léger ne requiert pas de bibliothèque client Oracle. Toutefois, certaines fonctionnalités supplémentaires sont disponibles lorsque python-oracledb est exécuté en mode Lourd.

    Remarques :

    Reportez-vous à Fonctionnalités Oracle Database prises en charge par python-oracledb pour plus d'informations sur les fonctionnalités prises en charge dans les modes léger et léger de python-oracledb. Toutes les fonctionnalités présentées dans ce lien ne sont pas disponibles avec Autonomous Database.

    Le pilote python-oracledb utilise le mode Lourd lorsque vous employez les bibliothèques client Oracle Instant ou Oracle Database, et que vous appelez oracledb.init_oracle_client() dans votre code Python.

    Lorsque vous installez le logiciel client Oracle, les versions minimales requises pour les connexions mTLS et TLS présentent les différences suivantes :

    • Connexions TLS mutuelles (mTLS) :

      • Si la base de données se trouve sur un ordinateur distant, téléchargez le package gratuit "Basic" ou "Basic Light" d'Oracle Instant Client correspondant à votre architecture de système d'exploitation. Utilisez une version prise en charge : Oracle Instant Client : 18.19 (ou version ultérieure), 19.2 (ou version ultérieure) ou 21 (version de base ou version ultérieure).

      • Sinon, vous pouvez utiliser les bibliothèques client Oracle Database complètes lorsqu'elles sont disponibles sur votre système (y compris le Client Oracle Database complet : Client Oracle Database : 18.19 (ou version ultérieure), 19.2 (ou version ultérieure) ou 21 (version de base ou version ultérieure).

    • Connexions TLS : les clients Oracle Call Interface (OCI) prennent en charge l'authentification TLS si vous utilisez les versions client suivantes :

      • Oracle Instant Client/Oracle Database Client 19.14 (ou version ultérieure) et 21.5 (ou version ultérieure) - toutes les plates-formes
      • Vous pouvez également utiliser les bibliothèques client Oracle Database complètes lorsqu'elles sont disponibles sur votre système, y compris le client Oracle Database complet 19.14 (ou version ultérieure) et 21.5 (ou version ultérieure).

Obtention des informations d'identification de sécurité (portefeuille Oracle) et activation de la connectivité réseau

Obtenez les informations d'identification de sécurité client pour vous connecter à une instance Autonomous Database.

  1. Téléchargez un fichier de portefeuille à partir de l'instance Autonomous Database afin d'obtenir un fichier ZIP contenant les informations d'identification de sécurité client et les paramètres de configuration réseau requis pour accéder à une instance Autonomous Database.

    Obtenez les informations d'identification de sécurité client (fichier wallet.zip) :

    Remarques :

    Protégez le fichier wallet.zip et son contenu pour éviter tout accès non autorisé à la base de données.
  2. décompressez le fichier d'informations d'identification client (wallet.zip).

Exécution d'une application Python à l'aide du mode léger de python-oracledb (mTLS)

Par défaut, python-oracledb utilise le mode Léger pour se connecter directement à l'instance Autonomous Database.

En mode Léger, seuls deux fichiers du fichier ZIP de portefeuille sont nécessaires :

  • tnsnames.ora : met en correspondance les noms de service réseau utilisés pour les chaînes de connexion d'application avec vos services de base de données.

  • ewallet.pem : active les connexions SSL/TLS en mode Léger.

Pour vous connecter en mode Léger :

  1. Déplacez les fichiers tnsnames.ora et ewallet.pem vers un emplacement sur le système.

    Par exemple, sur Linux :

    /opt/OracleCloud/MYDB

    Par exemple, sous Windows :

    C:\opt\OracleCloud\MYDB
  2. Dans votre application Python, définissez les paramètres de connexion suivants pour la connexion à une instance Autonomous Database :
    • config_dir : indique le répertoire contenant tnsnames.ora.
    • dsn : permet d'indiquer l'alias réseau de votre choix à partir du fichier tnsnames.ora.
    • password : indique le mot de passe de l'utilisateur de base de données.
    • user : indique l'utilisateur de base de données.
    • wallet_location : indique le répertoire contenant le fichier PEM (ewallet.pem).
    • wallet_password : indique le mot de passe pour le fichier PEM (ewallet.pem). Vous définissez ce mot de passe lorsque vous téléchargez le fichier wallet.zip.

    Par exemple, sous Linux, pour se connecter en tant qu'utilisateur ADMIN en utilisant oracledb.connect avec le nom de service réseau db2024_low (le nom de service se trouve dans tnsnames.ora), procédez comme suit :

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

    Par exemple, sous Windows, pour vous connecter en tant qu'utilisateur ADMIN en utilisant oracledb.connect avec le nom de service réseau db2024_low (le nom de service se trouve dans tnsnames.ora), procédez comme suit :

    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)

    L'utilisation d'une chaîne brute r"..." signifie que les barres obliques inverses sont traitées comme des séparateurs de répertoire.

    Comme indiqué dans cet exemple, wallet_location et config_dir sont définis sur le même répertoire (et le répertoire contient tnsnames.ora et ewallet.pem). Il n'est pas requis d'indiquer le même répertoire pour ces fichiers.

Si vous êtes derrière un pare-feu, vous pouvez mettre en tunnel les connexions TLS/SSL via un proxy à l'aide de HTTPS_PROXY dans le descripteur de connexion ou en définissant des attributs de connexion. La connexion réussie dépend de configurations de proxy spécifiques. Oracle ne recommande pas l'utilisation d'un proxy dans un environnement de production, en raison de l'impact possible sur les performances. Pour plus d'informations, reportez-vous à HTTPS_PROXY dans Référence des services Database Net d'Oracle Database 19c ou Référence des services Database Net d'Oracle Database 23ai.

En mode Léger, vous pouvez indiquer un proxy en ajoutant les paramètres https_proxy et http_proxy_port.

Par exemple, sur 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)

Par exemple, sous 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)

Exécution d'une application Python à l'aide du mode Lourd de python-oracledb (mTLS)

Par défaut, python-oracledb s'exécute en mode Léger, qui se connecte directement à Oracle Database. Des fonctionnalités python-oracledb supplémentaires sont disponibles lors de l'exécution du pilote en mode Lourd.

Remarques :

Le mode Lourd nécessite que les bibliothèques client Oracle soient installées là où vous exécutez Python. Vous devez également appeler oracledb.init_oracle_client() dans votre code Python.

En mode Lick, les trois fichiers suivants du fichier ZIP de portefeuille sont requis :

  • tnsnames.ora : contient les noms de service réseau utilisés pour les chaînes de connexion d'application et met en correspondance les chaînes avec vos services de base de données.

  • sqlnet.ora : indique la configuration côté client SQL*Net.

  • cwallet.sso : contient le portefeuille SSO ouvert automatiquement.

Pour vous connecter en mode Lourd :

  1. Placez les fichiers tnsnames.ora, sqlnet.ora et cwallet.sso sur votre système.

    Utilisez l'une des deux options suivantes pour placer ces fichiers sur votre système :

    • Si vous utilisez Instant Client, déplacez les fichiers vers une hiérarchie de sous-répertoires network/admin sous le répertoire Instant Client. Par exemple, en fonction de l'architecture ou du système client, et de l'endroit où vous avez installé Instant Client, les fichiers doivent se trouver dans un emplacement de répertoire tel que :

      /home/myuser/instantclient_19_21/network/admin

      ou

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

      Par exemple, sous Linux, si vous utilisez le client Oracle complet, déplacez les fichiers vers $ORACLE_HOME/network/admin.

    • Sinon, déplacez les fichiers vers un répertoire accessible.

      Par exemple, sous Linux, déplacez les fichiers vers le répertoire /opt/OracleCloud/MYDB et modifiez sqlnet.ora pour remplacer le répertoire de l'emplacement du portefeuille par le répertoire contenant le fichier cwallet.sso.

      Par exemple, sous Linux, modifiez sqlnet.ora comme suit :

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

      Lorsque les fichiers de configuration ne se trouvent pas à l'emplacement par défaut, votre application doit indiquer leur emplacement, soit avec le paramètre config_dir dans l'appel oracledb.init_oracle_client(), soit en définissant la variable d'environnement TNS_ADMIN.

      Remarques :

      Aucun de ces paramètres n'est nécessaire et vous n'avez pas besoin de modifier sqlnet.ora si vous placez tous les fichiers de configuration dans le répertoire network/admin.
  2. Dans votre application Python, définissez les paramètres d'initialisation et de connexion suivants pour la connexion à l'instance Autonomous Database :
    • config_dir : indique le répertoire de configuration lorsque vous placez les fichiers de configuration. Cette opération n'est requise que lorsque les fichiers de configuration sont placés dans un répertoire en dehors du répertoire de configuration client instantané network/admin.
    • dsn : indique l'alias réseau souhaité à partir du fichier tnsnames.ora.
    • password : indique le mot de passe de l'utilisateur de base de données.
    • user : indique l'utilisateur de base de données.

    Dans le premier cas de placement des fichiers de configuration, connectez-vous à l'instance Autonomous Database à l'aide de vos informations d'identification de base de données en définissant le paramètre dsn sur l'alias réseau de votre choix à partir de tnsnames.ora.

    Par exemple, pour vous connecter en tant qu'utilisateur ADMIN en utilisant oracledb.init_oracle_client et avec le nom de service réseau db2024_low (où le nom de service se trouve dans tnsnames.ora), utilisez la commande suivante :

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

    Lorsque les fichiers de configuration se trouvent dans un répertoire en dehors du répertoire de configuration client instantané, définissez le paramètre config_dir lorsque vous appelez oracledb.init_oracle_client.

    Par exemple, sous Linux, pour se connecter en tant qu'utilisateur ADMIN en utilisant le nom de service réseau db2024_low, procédez comme suit :

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

    Par exemple, sous Windows, connectez-vous en tant qu'utilisateur ADMIN en utilisant le nom de service réseau db2024_low :

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

    L'utilisation d'une chaîne brute r"..." signifie que les barres obliques inverses sont traitées comme des séparateurs de répertoire.

Si vous êtes derrière un pare-feu, vous pouvez mettre en tunnel les connexions TLS/SSL via un proxy à l'aide de HTTPS_PROXY dans le descripteur de connexion ou en définissant des attributs de connexion. La connexion réussie dépend de configurations de proxy spécifiques. Oracle ne recommande pas l'utilisation d'un proxy dans un environnement de production, en raison de l'impact possible sur les performances. Pour plus d'informations, reportez-vous à HTTPS_PROXY dans Référence des services Database Net d'Oracle Database 19c ou Référence des services Database Net d'Oracle Database 23ai.

En mode Lourd, vous pouvez indiquer un proxy en modifiant le fichier sqlnet.ora et en ajoutant la ligne suivante :

SQLNET.USE_HTTPS_PROXY=on

En outre, modifiez tnsnames.ora et ajoutez un nom de proxy HTTPS_PROXY et un port HTTPS_PROXY_PORT à la liste d'adresses de descripteur de connexion de tout nom de service que vous prévoyez d'utiliser.

Exemple :

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

Pour plus d'informations sur le mode Lourd, reportez-vous à Activation du mode Lourd de python-oracledb.