Installation et configuration du pilote ODBC pour Linux

Linux utilise des sources de données nommées (DSNs) pour connecter les applications client basées sur ODBC à Snowflake. Vous pouvez choisir d’installer le pilote ODBC en utilisant le fichier TGZ, le pack RPM ou le pack DEB fourni dans le Snowflake Client Repository.

Dans ce chapitre :

Conditions préalables

Système d’exploitation

Pour obtenir la liste des systèmes d’exploitation pris en charge par les clients Snowflake, voir Prise en charge par les systèmes d’exploitation.

Avec ODBC version 3.0.1, le pilote ne prend en charge plus les versions 6 de CentOS.

Gestionnaire de pilotes : iODBC ou unixODBC

Un gestionnaire de pilotes est nécessaire pour gérer la communication entre Snowflake et le pilote ODBC. Le pilote prend en charge l’utilisation de iODBC ou de unixODBC comme gestionnaire de pilotes.

iODBC

Si iODBC n’est pas installé sur CentOS, comme sudo, exécutez la commande suivante :

$ yum install libiodbc
Copy

unixODBC

unixODBC fournit les utilitaires de ligne de commande odbcinst et isql utilisés pour installer, configurer et tester le pilote. Pour vérifier si unixODBC est installé, exécutez les commandes suivantes :

$ which odbcinst

$ which isql
Copy

Si unixODBC n’est pas installé :

  1. En tant que sudo, exécutez les commandes suivantes :

    $ yum search unixODBC
    
    $ yum install unixODBC.x86_64
    
    Copy
  2. Vérifiez le répertoire où odbcinst s’attend à ce que les fichiers odbcinst.ini et odbc.ini se trouvent :

    $ odbcinst -j
    
    Copy

    L’emplacement devrait être /etc.

Étape 1 : vérification de la signature du paquet (RPM ou DEB uniquement) — Facultatif

Note

Si vous installez le pilote ODBC en utilisant yum ou le fichier TGZ, ignorez cette étape.

Si vous installez le pilote ODBC à l’aide du pack RPM ou DEB et que vous souhaitez vérifier la signature du pack avant l’installation, effectuez les tâches suivantes :

1.1 : téléchargement et importation de la dernière clé publique Snowflake

Depuis le serveur de clés publiques, téléchargez et importez la clé publique Snowflake GPG pour la version du pilote ODBC que vous utilisez :

  • Pour les versions 2.25.6 et supérieures :

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 630D9F3CAB551AF3
  • Pour les versions 2.22.1 à 2.25.5 :

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 37C7086698CB005C
  • Pour les versions 2.18.2 à 2.22.0 :

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys EC218558EABB25A1
  • Pour les versions 2.18.1 et inférieures :

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 93DB296A69BE019A

Note

Si cette commande échoue avec l’erreur suivante :

gpg: keyserver receive failed: Server indicated a failure
Copy

puis spécifiez que vous voulez utiliser le port 80 pour le serveur de clés :

gpg --keyserver hkp://keyserver.ubuntu.com:80  ...
Copy

1.2 : téléchargement du paquet de pilotes RPM ou DEB

Téléchargez le pack à partir du Snowflake Client Repository. Pour plus de détails, voir Téléchargement du pilote ODBC.

1.3 : vérification de la signature du paquet de pilote RPM ou DEB

Signature du paquet RPM

  1. Vérifiez que la clé a été importée avec succès :

    $ gpg --list-keys
    
    Copy

    La commande doit afficher la clé Snowflake.

  2. Vérifiez la signature :

    $ rpm -K snowflake-odbc-<version>.x86_64.rpm
    
    Copy

    Note

    Si rpm n’a pas la clé GPG que vous avez importée, la commande signalera que les signatures ne sont pas OK et produira un avertissement NOKEY :

    $ rpm -K snowflake-odbc-<version>.x86_64.rpm
    
    snowflake-odbc-<version>.x86_64.rpm: digests SIGNATURES NOT OK
    
    $ rpm -Kv snowflake-odbc-<version>.x86_64.rpm
    
    snowflake-odbc-<version>.rpm:
        Header V4 RSA/SHA1 Signature, key ID 98cb005c: NOKEY
        Header SHA1 digest: OK
        V4 RSA/SHA1 Signature, key ID 98cb005c: NOKEY
        MD5 digest: OK
    
    Copy

    Si cela se produit, exécutez les commandes suivantes pour exporter la clé GPG, importez la clé dans rpm et vérifiez à nouveau la signature :

    $ gpg --export -a <GPG_KEY_ID> > odbc-signing-key.asc
    $ sudo rpm --import odbc-signing-key.asc
    $ rpm -K snowflake-odbc-<version>.x86_64.rpm
    
    Copy

    <GPG_KEY_ID> est l’ID de la clé que vous avez installée dans 1.1 : téléchargement et importation de la dernière clé publique Snowflake.

Signature du paquet DEB

  1. Installez l’outil de vérification de la signature du pack :

    $ sudo apt-get install debsig-verify
    
    Copy
  2. Importez la clé publique vers le « trousseau » :

    $ mkdir /usr/share/debsig/keyrings/<GPG_KEY_ID>
    $ gpg --export <GPG_KEY_ID> > snowflakeKey.asc
    $ touch /usr/share/debsig/keyrings/<GPG_KEY_ID>/debsig.gpg
    $ gpg --no-default-keyring --keyring /usr/share/debsig/keyrings/<GPG_KEY_ID>/debsig.gpg --import snowflakeKey.asc
    
    Copy

    <GPG_KEY_ID> est l’ID de la clé que vous avez installée dans 1.1 : téléchargement et importation de la dernière clé publique Snowflake.

  3. Configurez une politique pour la clé. Pour plus de détails, voir /usr/share/doc/debsig-verify. La politique doit être stockée dans le répertoire suivant :

    /etc/debsig/policies/<GPG_KEY_ID>
    
    Copy

    <GPG_KEY_ID> est l’ID de la clé que vous avez installée dans 1.1 : téléchargement et importation de la dernière clé publique Snowflake.

    Stockez la politique dans un fichier nommé policy_name.pol, où policy_name est le nom de la politique. Pour le nom de la politique, vous pouvez utiliser n’importe quelle chaîne de texte, mais celle-ci ne peut pas contenir d’espaces vides.

    Voici un exemple de fichier de politique pour une clé avec l’ID 630D9F3CAB551AF3 :

    <?xml version="1.0"?>
    <!DOCTYPE Policy SYSTEM "http://www.debian.org/debsig/1.0/policy.dtd">
    <Policy xmlns="https://www.debian.org/debsig/1.0/">
    <Origin Name="Snowflake Computing" id="630D9F3CAB551AF3"
    Description="Snowflake ODBC Driver DEB package"/>
    
    <Selection>
    <Required Type="origin" File="debsig.gpg" id="630D9F3CAB551AF3"/>
    </Selection>
    
    <Verification MinOptional="0">
    <Required Type="origin" File="debsig.gpg" id="630D9F3CAB551AF3"/>
    </Verification>
    
    </Policy>
  4. Vérifiez la signature :

    $ sudo debsig-verify snowflake-odbc-<version>.x86_64.deb
    
    Copy

Note

Par défaut, l’outil de vérification de signature de pack dpkg ne vérifie pas la signature lorsque vous installez le pack. Si vous voulez vérifier la signature à chaque fois que vous exécutez dpkg, supprimez la ligne --no-debsig du fichier /etc/dpkg/dpkg.cfg.

1.4 : suppression de l’ancienne clé publique Snowflake — Facultatif

Votre environnement local peut contenir plusieurs clés GPG. Cependant, pour des raisons de sécurité, Snowflake fait tourner périodiquement la clé publique GPG. Nous recommandons de supprimer la clé publique existante après avoir confirmé que la dernière clé fonctionne avec le dernier pack signé.

Pour effacer la clé :

$ gpg --delete-key "Snowflake Computing"
Copy

Étape 2 : installation du pilote ODBC

Installez le pilote à l’aide de l’une des approches suivantes :

Utilisation de yum pour télécharger et installer le pilote

Avec la version 2.21.1 du pilote ODBC (et versions ultérieures), vous pouvez utiliser yum pour télécharger et installer le pilote.

Pour télécharger et installer le pilote ODBCde Snowflake pour Linux en utilisant yum :

  1. Créez un fichier nommé /etc/yum.repos.d/snowflake-odbc.repo, et ajoutez le texte suivant au fichier :

    [snowflake-odbc]
    name=snowflake-odbc
    baseurl=https://sfc-repo.snowflakecomputing.com/odbc/linux/<VERSION_NUMBER>/
    gpgkey=https://sfc-repo.snowflakecomputing.com/odbc/Snowkey-<GPG_KEY_ID>-gpg
    
    Copy

    VERSION_NUMBER est le numéro de version spécifique du pilote (par exemple, 3.1.4) et GPG_KEY_ID est l’un des IDs de clés suivants :

    Version du pilote ODBC

    ID de clé GPG

    2.22.1 et supérieur

    630D9F3CAB551AF3

    Dans les paramètres ci-dessus, baseurl et gpgkey pointent vers le Snowflake Client Repository sur Amazon S3. Si vous voulez utiliser le miroir sur Azure Blob à la place, remplacez le nom d’hôte par https://sfc-repo.azure.snowflakecomputing.com/ :

    [snowflake-odbc]
    name=snowflake-odbc
    baseurl=https://sfc-repo.azure.snowflakecomputing.com/odbc/linux/<VERSION_NUMBER>/
    gpgkey=https://sfc-repo.azure.snowflakecomputing.com/odbc/Snowkey-<GPG_KEY_ID>-gpg
    
    Copy
  2. Exécutez la commande suivante pour installer le pilote :

    yum install snowflake-odbc
    
    Copy

Installation du fichier TGZ

Pour installer le pilote ODBC de Snowflake pour Linux en utilisant le fichier TGZ que vous avez téléchargé précédemment.

  1. Copiez le fichier téléchargé (snowflake_linux_x8664_odbc-version.tgz) dans un répertoire fonctionnel.

  2. Décompressez le fichier :

    $ gunzip snowflake_linux_x8664_odbc-<version>.tgz
    
    Copy
  3. Extrayez les fichiers du fichier.tar :

    $ tar -xvf snowflake_linux_x8664_odbc-<version>.tar
    
    Copy
  4. Copiez le dossier snowflake_odbc résultant dans le répertoire dans lequel vous souhaitez installer le pilote. Prenez note du répertoire. Vous aurez besoin de l’emplacement plus tard dans les instructions.

Installation du paquet RPM

Note

Le pack RPM nécessite unixODBC comme gestionnaire de pilotes.

Pour installer le pilote ODBC de Snowflake pour Linux à l’aide du pack RPM que vous avez téléchargé précédemment, après avoir vérifié éventuellement la signature du pack, exécutez la commande suivante :

$ yum install snowflake-odbc-<version>.x86_64.rpm
Copy

Note

Le répertoire d’installation est /usr/lib64/snowflake/odbc/. Vous aurez besoin de l’emplacement plus tard dans les instructions.

Installation du paquet DEB

Note

Le pack DEB nécessite unixODBC comme gestionnaire de pilotes.

Pour installer le pilote ODBC de Snowflake pour Linux à l’aide du pack DEB que vous avez téléchargé précédemment, après avoir vérifié éventuellement la signature du pack, exécutez la commande suivante :

$ sudo dpkg -i snowflake-odbc-<version>.x86_64.deb
Copy

La commande peut échouer si aucune des dépendances requises pour le gestionnaire de packs n’est installée. Si cela se produit, installez-les maintenant :

$ sudo apt-get install -f
Copy

Note

Le répertoire d’installation est /usr/lib/snowflake/odbc/. Vous aurez besoin de l’emplacement plus tard dans les instructions.

Étape 3 : configuration de l’environnement (TGZ uniquement)

Note

Si vous avez installé le pilote ODBC en utilisant le fichier RPM ou DEB du pack, ignorez cette étape.

Si vous l’avez installé en utilisant le fichier TGZ, configurez l’environnement en utilisant le gestionnaire de pilotes installé (soit iODBC ou unixODBC).

Configuration avec iODBC

Dans une fenêtre de terminal, passez dans le répertoire snowflake_odbc et exécutez la commande suivante pour installer Snowflake ODBC :

$ ./iodbc_setup.sh
Copy

Ce script exécute les étapes suivantes :

  • Ajoute une connexion Snowflake à votre fichier de niveau système /etc/odbc.ini.

  • Ajoute les informations du pilote Snowflake à votre fichier de niveau système /etc/odbcinst.ini.

  • Ajoute tous les certificats d’autorité de certification (CA) requis par le pilote Snowflake ODBC à votre fichier simba.snowflake.ini de niveau système.

En exécutant iodbc_setup.sh, vous n’avez pas besoin de définir de variables d’environnement.

En outre, si vous ne voulez pas que Snowflake change la configuration de votre système, ajoutez les variables d’environnement suivantes à votre fichier de configuration shell (par ex. .profile, .bash_profile) :

  • ODBCINI = <chemin>/conf/odbc.ini

  • ODBCINSTINI = <chemin>/conf/odbcinst.ini

path est l’emplacement du répertoire snowflake_odbc. Si vous avez configuré d’autres pilotes ODBC dans votre système et prévoyez d’ajouter les entrées ODBC Snowflake à vos fichiers odbc.ini et odbcinst.ini existants à l’étape suivante, alors pointez ODBCINI et ODBCINSTINI vers l’emplacement de ces fichiers.

Configuration avec unixODBC

Dans une fenêtre de terminal, passez dans le répertoire snowflake_odbc et exécutez la commande suivante pour installer Snowflake ODBC :

$ ./unixodbc_setup.sh
Copy

Ce script exécute les étapes suivantes :

  • Ajoute une connexion Snowflake à votre fichier de niveau système /etc/odbc.ini.

  • Ajoute les informations du pilote Snowflake à votre fichier de niveau système /etc/odbcinst.ini.

  • Ajoute tous les certificats d’autorité de certification (CA) requis par le pilote Snowflake ODBC à votre fichier simba.snowflake.ini de niveau système.

En exécutant unixodbc_setup.sh, vous n’avez pas besoin de définir de variables d’environnement.

En outre, si vous ne voulez pas que Snowflake change la configuration de votre système, ajoutez les variables d’environnement suivantes à votre fichier de configuration shell, par ex. .profile, .bash_profile :

  • ODBCSYSINI = <chemin>/conf/

path est l’emplacement du répertoire snowflake_odbc. Si vous avez configuré d’autres pilotes ODBC dans votre système et prévoyez d’ajouter les entrées ODBC Snowflake à vos fichiers odbc.ini et odbcinst.ini existants à l’étape suivante, alors pointez ODBCSYSINI vers l’emplacement de ces fichiers.

Étape 4 : configuration du pilote ODBC

La configuration du pilote ODBC nécessite l’ajout d’entrées dans les fichiers suivants :

  • <chemin>/lib/simba.snowflake.ini

  • /etc/odbcinst.ini (ou <chemin>/conf/odbc.ini si vous utilisez des variables d’environnement)

  • /etc/odbc.ini (ou <chemin>/conf/odbcinst.ini si vous utilisez des variables d’environnement)

path est l’emplacement du répertoire snowflake_odbc.

4.1 : fichier simba.snowflake.ini (gestionnaire de pilotes et connexion)

Ajoutez les entrées suivantes au fichier simba.snowflake.ini :

ErrorMessagesPath=<path>/ErrorMessages/
LogPath=/tmp/
ODBCInstLib=<driver_manager_path>
CABundleFile=<path>/lib/cacert.pem
ANSIENCODING=UTF-8
Copy

Où :

  • path est l’emplacement du répertoire snowflake_odbc.

  • driver_manager_path est l’emplacement de votre répertoire du gestionnaire de pilotes :

    • iODBC : ODBCInstLib=libiodbcinst.so.2

    • unixODBC : ODBCInstLib=libodbcinst.so

    Note

    Si le répertoire de votre gestionnaire de pilotes n’est pas inclus dans la variable d’environnement LD_LIBRARY_PATH, indiquez ici le chemin complet vers la bibliothèque du gestionnaire de pilotes.

Vérifiez que vous avez les permissions d’écriture sur le chemin d’accès au journal.

Le paramètre ANSIENCODING spécifie l’encodage des caractères de l’application. La valeur par défaut est UTF-8. Le paramètre est destiné à être utilisé uniquement par Snowflake ; les clients ne doivent pas modifier la valeur.

4.2 : fichier odbcinst.ini (enregistrement de pilotes)

Ajoutez les entrées suivantes au fichier odbcinst.ini :

[ODBC Drivers]
SnowflakeDSIIDriver=Installed

[SnowflakeDSIIDriver]
APILevel=1
ConnectFunctions=YYY
Description=Snowflake DSII
Driver=/<path>/lib/libSnowflake.so
DriverODBCVer=03.52
SQLLevel=1
Copy

path est l’emplacement du répertoire snowflake_odbc.

4.3 : fichier odbc.ini (entrées DSN)

Pour chaque DSN, ajoutez les entrées suivantes au fichier odbc.ini :

  • Nom DSN et nom du pilote (SnowflakeDSIIDriver) au format <nom_dsn> = <nom_pilote>.

  • Paramètres :

    • Paramètres de connexion requis, tels que server.

    • Tout paramètre supplémentaire facultatif, par exemple role, database et warehouse par défaut.

    Les paramètres sont spécifiés sous forme de <nom_paramètre> = <valeur>. Pour plus de détails sur les paramètres qui peuvent être définis pour chaque DSN, voir Paramètres de configuration et de connexion ODBC.

L’exemple suivant illustre un fichier odbc.ini qui configure deux sources de données qui utilisent différentes formes d’un identificateur de compte dans l”server URL :

  • testodbc1 utilise un identificateur de compte qui utilise un identificateur de compte qui spécifie le compte myaccount dans l’organisation myorganization.

  • testodbc2 utilise le localisateur de compte xy12345 comme identificateur de compte.

    Notez que testodbc2 utilise un compte dans la région AWS US Ouest (Oregon). Si le compte se trouve dans une autre région ou s’il utilise un autre fournisseur Cloud, vous devez spécifier des segments supplémentaires après le localisateur de compte.

    [ODBC Data Sources]
    testodbc1 = SnowflakeDSIIDriver
    testodbc2 = SnowflakeDSIIDriver
    
    
    [testodbc1]
    Driver      = /usr/jsmith/snowflake_odbc/lib/libSnowflake.so
    Description =
    server      = myorganization-myaccount.snowflakecomputing.com
    role        = sysadmin
    
    
    [testodbc2]
    Driver      = /usr/jsmith/snowflake_odbc/lib/libSnowflake.so
    Description =
    server      = xy12345.snowflakecomputing.com
    role        = analyst
    database    = sales
    warehouse   = analysis
    
    Copy

Remarques :

  • testodbc1 et testodbc2 ont des rôles par défaut.

  • testodbc2 possède également une base de données et un entrepôt par défaut.

Étape 5 : test du pilote ODBC

Testez le pilote à l’aide du gestionnaire de pilotes installé (soit iODBC ou unixODBC).

Test avec iODBC

Testez les DSNs que vous avez créés. Sur la ligne de commande, spécifiez le nom DSN, le nom d’utilisateur et le mot de passe, en utilisant le format suivant :

iodbctest "DSN=<nom_dsn>;UID=<nom_utilisateur>;PWD=<mot de passe>"

Par exemple :

$ iodbctest "DSN=testodbc2;UID=mary;PWD=password"
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0709.0909
Driver: 2.12.70 (Snowflake)

SQL>
Copy

Test avec unixODBC

Testez les DSNs que vous avez créés en utilisant l’utilitaire de ligne de commande isql fourni avec unixODBC.

Sur la ligne de commande, spécifiez le nom DSN, le nom d’utilisateur et le mot de passe.

Par exemple :

$ isql -v testodbc2 mary <password>

Dec 14 22:57:50 INFO  2022078208 Driver::LogVersions: SDK Version: 09.04.09.1013
Dec 14 22:57:50 INFO  2022078208 Driver::LogVersions: DSII Version: 2.12.36
Dec 14 22:57:50 INFO  2022078208 SFConnection::connect: Tracing level: 4

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>
Copy