Installieren und Konfigurieren des ODBC-Treibers für Linux

Linux verwendet benannte Datenquellen (DSNs), um ODBC-basierte Clientanwendungen mit Snowflake zu verbinden. Sie können wählen, ob Sie den ODBC-Treiber über die TGZ-Datei, das RPM-Paket oder das DEB-Paket installieren möchten, das im Snowflake Client Repository bereitgestellt wird.

Unter diesem Thema:

Voraussetzungen

Betriebssystem

Eine Liste der von Snowflake-Clients unterstützten Betriebssysteme finden Sie unter Betriebssystemunterstützung.

Ab ODBC-Version 3.0.1 bietet der Treiber keine Unterstützung mehr für CentOS 6-Versionen.

Treiber-Manager: iODBC oder unixODBC

Ein Treiber-Manager ist erforderlich, um die Kommunikation zwischen Snowflake und dem ODBC-Treiber zu verwalten. Der Treiber unterstützt die Verwendung von iODBC oder unixODBC als Treibermanager.

iODBC

Wenn iODBC nicht auf CentOS, wie sudo, installiert ist, führen Sie den folgenden Befehl aus:

$ yum install libiodbc
Copy

unixODBC

unixODBC stellt die Befehlszeilen-Dienstprogramme odbcinst und isql zur Verfügung, die zur Installation, Konfiguration und zum Testen des Treibers verwendet werden. Um zu überprüfen, ob unixODBC installiert ist, führen Sie die folgenden Befehle aus:

$ which odbcinst

$ which isql
Copy

Wenn unixODBC nicht installiert ist:

  1. Führen Sie als sudo die folgenden Befehle aus:

    $ yum search unixODBC
    
    $ yum install unixODBC.x86_64
    
    Copy
  2. Überprüfen Sie das Verzeichnis, in dem odbcinst die Dateien odbcinst.ini und odbc.ini erwartet:

    $ odbcinst -j
    
    Copy

    Der Speicherort sollte /etc sein.

Schritt 1: Paketsignatur überprüfen (nur RPM oder DEB) – Optional

Bemerkung

Wenn Sie den ODBC-Treiber mit yum oder der TGZ-Datei installieren, überspringen Sie diesen Schritt.

Wenn Sie den ODBC-Treiber mit dem RPM- oder DEB-Paket installieren und die Paketsignatur vor der Installation überprüfen möchten, führen Sie die folgenden Schritte aus:

1.1: Neuesten öffentlichen Snowflake-Schlüssel herunterladen und importieren

Laden Sie vom öffentlichen Keyserver den öffentlichen Snowflake-GPG-Schlüssel in der von Ihnen verwendeten ODBC-Treiberversion herunter, und importieren Sie diesen:

  • Für Version 2.25.6 und höher:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 630D9F3CAB551AF3
  • Für die Versionen 2.22.1 bis 2.25.5:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 37C7086698CB005C
  • Für die Versionen 2.18.2 bis 2.22.0:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys EC218558EABB25A1
  • Für Version 2.18.1 und niedriger:

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

Bemerkung

Wenn dieser Befehl mit der folgenden Fehlermeldung fehlschlägt:

gpg: keyserver receive failed: Server indicated a failure
Copy

Geben Sie an, dass Sie Port 80 für den Keyserver verwenden möchten:

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

1.2: RPM- oder DEB-Treiberpaket herunterladen

Laden Sie das Paket aus dem Snowflake Client Repository herunter. Weitere Details dazu finden Sie unter Herunterladen des ODBC-Treibers.

1.3: Signatur für das RPM- oder DEB-Treiberpaket überprüfen

RPM-Paketsignatur

  1. Überprüfen Sie, ob der Schlüssel erfolgreich importiert wurde:

    $ gpg --list-keys
    
    Copy

    Der Befehl sollte den Snowflake-Schlüssel anzeigen.

  2. Überprüfen Sie die Signatur:

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

    Bemerkung

    Wenn rpm nicht über den GPG-Schlüssel verfügt, den Sie importiert haben, meldet der Befehl, dass die Signaturen nicht OK sind, und gibt eine NOKEY-Warnung aus:

    $ 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

    Führen Sie in diesem Fall die folgenden Befehle aus, um den GPG-Schlüssel zu exportieren, den Schlüssel in rpm zu importieren und die Signatur erneut zu überprüfen:

    $ 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

    wobei <GPG_KEY_ID> die ID für den Schlüssel ist, den Sie in 1.1: Neuesten öffentlichen Snowflake-Schlüssel herunterladen und importieren installiert haben.

DEB-Paketsignatur

  1. Installieren Sie das Tool zur Überprüfung der Paketsignatur:

    $ sudo apt-get install debsig-verify
    
    Copy
  2. Importieren Sie den öffentlichen Schlüssel in den Schlüsselbund:

    $ 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

    wobei <GPG_KEY_ID> die ID für den Schlüssel ist, den Sie in 1.1: Neuesten öffentlichen Snowflake-Schlüssel herunterladen und importieren installiert haben.

  3. Konfigurieren Sie eine Richtlinie für den Schlüssel. Weitere Details dazu finden Sie unter /usr/share/doc/debsig-verify. Die Richtlinie muss im folgenden Verzeichnis gespeichert werden:

    /etc/debsig/policies/<GPG_KEY_ID>
    
    Copy

    wobei <GPG_KEY_ID> die ID für den Schlüssel ist, den Sie in 1.1: Neuesten öffentlichen Snowflake-Schlüssel herunterladen und importieren installiert haben.

    Speichern Sie die Richtlinie in einer Datei mit dem Namen policy_name.pol, wobei policy_name der von Ihnen vergebene Name für die Richtlinie ist. Für den Richtliniennamen können Sie eine beliebige Zeichenfolge verwenden, die jedoch keine Leerzeichen enthalten darf.

    Hier ist eine Beispiel-Richtliniendatei für einen Schlüssel mit dem 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. Überprüfen Sie die Signatur:

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

Bemerkung

Standardmäßig erfolgt beim Installieren des Pakets keine Überprüfung der Signatur durch das dpkg-Paket-Signaturverifizierungstool. Wenn Sie die Signatur bei jeder Ausführung von dpkg überprüfen möchten, müssen Sie die Zeile --no-debsig aus der Datei /etc/dpkg/dpkg.cfg entfernen.

1.4: Alten öffentlichen Snowflake-Schlüssel löschen – Optional

Ihre lokale Umgebung kann mehrere GPG-Schlüssel enthalten. Aus Sicherheitsgründen rotiert Snowflake jedoch regelmäßig den öffentlichen GPG-Schlüssel. Als Best Practice empfehlen wir, den vorhandenen öffentlichen Schlüssel zu löschen, nachdem wir bestätigt haben, dass der letzte Schlüssel mit dem zuletzt signierten Paket funktioniert.

So löschen Sie den Schlüssel:

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

Schritt 2: ODBC-Treiber installieren

Installieren Sie den Treiber mit einer der folgenden Methoden:

Verwenden von yum zum Herunterladen und Installieren des Treibers

Mit Version 2.21.1 des ODBC-Treibers (und spätere Versionen) können Sie yum verwenden, um den Treiber herunterzuladen und zu installieren.

So laden Sie den Snowflake-ODBC-Treiber für Linux mit yum herunter und installieren ihn:

  1. Erstellen Sie eine Datei mit dem Namen /etc/yum.repos.d/snowflake-odbc.repo, und fügen Sie der Datei den folgenden Text hinzu:

    [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

    wobei VERSION_NUMBER die spezifische Versionsnummer des Treibers (z. B. 3.1.4) und GPG_KEY_ID eine der folgenden Schlüssel-IDs ist:

    ODBC-Treiberversion

    GPG-Schlüssel-ID

    2.22.1 und höher

    630D9F3CAB551AF3

    In den obigen Einstellungen zeigen baseurl und gpgkey auf das Snowflake Client Repository auf Amazon S3. Wenn Sie stattdessen den Spiegel auf Azure Blob verwenden möchten, ändern Sie den Hostnamen in 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. Führen Sie den folgenden Befehl aus, um den Treiber zu installieren:

    yum install snowflake-odbc
    
    Copy

Installieren der TGZ-Datei

So installieren Sie den Snowflake-ODBC-Treiber für Linux mithilfe der zuvor heruntergeladenen TGZ-Datei:

  1. Kopieren Sie die heruntergeladene Datei (snowflake_linux_x8664_odbc-version.tgz) in ein Arbeitsverzeichnis.

  2. Entpacken Sie die Datei:

    $ gunzip snowflake_linux_x8664_odbc-<version>.tgz
    
    Copy
  3. Extrahieren Sie die Dateien aus der .tar-Datei:

    $ tar -xvf snowflake_linux_x8664_odbc-<version>.tar
    
    Copy
  4. Kopieren Sie den resultierenden Ordner snowflake_odbc in das Verzeichnis, in dem Sie den Treiber installieren möchten. Notieren Sie sich dieses Verzeichnis. Sie werden den Speicherort später in der Anleitung benötigen.

Installieren des RPM-Pakets

Bemerkung

Das RPM-Paket benötigt unixODBC als Treiber-Manager.

Um den Snowflake-ODBC-Treiber für Linux mit dem zuvor heruntergeladenen RPM-Paket zu installieren, führen Sie nach der optionalen Überprüfung der Paketsignatur den folgenden Befehl aus:

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

Bemerkung

Das Installationsverzeichnis ist /usr/lib64/snowflake/odbc/. Sie werden den Speicherort später in der Anleitung benötigen.

Installieren des DEB-Pakets

Bemerkung

Das DEB-Paket benötigt unixODBC als Treiber-Manager.

Um den Snowflake-ODBC-Treiber für Linux mit dem zuvor heruntergeladenen DEB-Paket zu installieren, führen Sie nach der optionalen Überprüfung der Paketsignatur den folgenden Befehl aus:

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

Der Befehl kann fehlschlagen, wenn keine erforderlichen Abhängigkeiten für den Paketmanager installiert sind. Wenn das passiert, installieren Sie diese jetzt:

$ sudo apt-get install -f
Copy

Bemerkung

Das Installationsverzeichnis ist /usr/lib/snowflake/odbc/. Sie werden den Speicherort später in der Anleitung benötigen.

Schritt 3: Umgebung konfigurieren (nur TGZ)

Bemerkung

Wenn Sie den ODBC-Treiber mit der RPM- oder DEB-Paketdatei installiert haben, überspringen Sie diesen Schritt.

Wenn Sie die Installation mit der TGZ-Datei vorgenommen haben, konfigurieren Sie die Umgebung mit dem installierten Treiber-Manager (entweder iODBC oder unixODBC).

Konfigurieren mit iODBC

Wechseln Sie in einem Terminalfenster in das Verzeichnis snowflake_odbc, und führen Sie den folgenden Befehl aus, um Snowflake ODBC zu installieren:

$ ./iodbc_setup.sh
Copy

Dieses Skript führt die folgenden Schritte aus:

  • Fügt eine Snowflake-Verbindung zu Ihrer Datei /etc/odbc.ini auf Systemebene hinzu.

  • Fügt die Snowflake-Treiberinformationen zu Ihrer Datei auf Systemebene /etc/odbcinst.ini hinzu.

  • Fügt alle vom Snowflake-ODBC-Treiber benötigten Zertifikate der Zertifizierungsstelle (CA) zu Ihrer Datei simba.snowflake.ini auf Systemebene hinzu.

Wenn Sie iodbc_setup.sh ausführen, müssen Sie keine Umgebungsvariablen festlegen.

Wenn Sie nicht möchten, dass Snowflake Ihre Systemkonfigurationen ändert, fügen Sie der Shell-Konfigurationsdatei die folgenden Umgebungsvariablen hinzu (z. B. .profile, .bash_profile):

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

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

Wobei path der Speicherort des snowflake_odbc-Verzeichnisses ist. Wenn Sie andere ODBC-Treiber in Ihrem System konfiguriert haben und im nächsten Schritt die Snowflake-ODBC-Einträge zu Ihren bestehenden Dateien odbc.ini und odbcinst.ini hinzufügen möchten, dann lassen Sie ODBCINI und ODBCINSTINI auf den Speicherort dieser Dateien verweisen.

Konfigurieren mit unixODBC

Wechseln Sie in einem Terminalfenster in das Verzeichnis snowflake_odbc, und führen Sie den folgenden Befehl aus, um Snowflake ODBC zu installieren:

$ ./unixodbc_setup.sh
Copy

Dieses Skript führt die folgenden Schritte aus:

  • Fügt eine Snowflake-Verbindung zu Ihrer Datei auf Systemebene /etc/odbc.ini hinzu.

  • Fügt die Snowflake-Treiberinformationen zu Ihrer Datei auf Systemebene /etc/odbcinst.ini hinzu.

  • Fügt alle vom Snowflake-ODBC-Treiber benötigten Zertifikate der Zertifizierungsstelle (CA) zu Ihrer Datei simba.snowflake.ini auf Systemebene hinzu.

Wenn Sie unixodbc_setup.sh ausführen, müssen Sie keine Umgebungsvariablen festlegen.

Wenn Sie nicht möchten, dass Snowflake Ihre Systemkonfigurationen ändert, fügen Sie der Shell-Konfigurationsdatei die folgenden Umgebungsvariablen hinzu (z. B. .profile, .bash_profile):

  • ODBCSYSINI = <Pfad>/conf/

Wobei path der Speicherort des snowflake_odbc-Verzeichnisses ist. Wenn Sie andere ODBC-Treiber in Ihrem System konfiguriert haben und im nächsten Schritt die Snowflake-ODBC-Einträge zu Ihren bestehenden Dateien odbc.ini und odbcinst.ini hinzufügen möchten, dann lassen Sie ODBCSYSINI auf den Speicherort dieser Dateien verweisen.

Schritt 4: ODBC-Treiber konfigurieren

Die Konfiguration des ODBC-Treibers erfordert das Hinzufügen von Einträgen zu den folgenden Dateien:

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

  • /etc/odbcinst.ini (oder <Pfad>/conf/odbc.ini, wenn Sie Umgebungsvariablen verwenden)

  • /etc/odbc.ini (oder <Pfad>/conf/odbcinst.ini, wenn Sie Umgebungsvariablen verwenden)

Wobei path der Speicherort des snowflake_odbc-Verzeichnisses ist.

4.1: simba.snowflake.ini-Datei (Treibermanager und Protokollierung)

Fügen Sie die folgenden Einträge zur Datei simba.snowflake.ini hinzu:

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

Wobei:

  • path ist der Speicherort des snowflake_odbc-Verzeichnisses.

  • driver_manager_path ist der Speicherort Ihres Treiber-Manager-Verzeichnisses:

    • iODBC: ODBCInstLib=libiodbcinst.so.2

    • unixODBC: ODBCInstLib=libodbcinst.so

    Bemerkung

    Wenn das Verzeichnis Ihres Treibermanager nicht in der Umgebungsvariablen LD_LIBRARY_PATH enthalten ist, geben Sie hier den vollständigen Pfad zur Treibermanager-Bibliothek an.

Überprüfen Sie, ob Sie über Schreibrechte für den Protokollpfad verfügen.

Der Parameter ANSIENCODING gibt die Zeichencodierung der Anwendung an. Die Voreinstellung ist UTF-8. Der Parameter ist nur zur Verwendung durch Snowflake vorgesehen. Kunden sollten den Wert nicht ändern.

4.2: odbcinst.ini-Datei (Treiberregistrierung)

Fügen Sie die folgenden Einträge zur Datei odbcinst.ini hinzu:

[ODBC Drivers]
SnowflakeDSIIDriver=Installed

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

Wobei path der Speicherort des snowflake_odbc-Verzeichnisses ist.

4.3: odbc.ini-Datei (DSN-Einträge)

Fügen Sie für jede DSN die folgenden Einträge zur Datei odbc.ini hinzu:

  • DSN-Name und Treibername (SnowflakeDSIIDriver) in der Form <DSN-Name> = <Treibername>.

  • Parameter:

    • Erforderliche Verbindungsparameter, wie z. B. server.

    • Alle zusätzlichen, optionalen Parameter, wie z. B. Standardrolle (role), Standarddatenbank (database) und Standardwarehouse (warehouse).

    Parameter werden in der Form <Parametername> = <Wert> angegeben. Einzelheiten zu den Parametern, die für jeden DSN festgelegt werden können, finden Sie unter Konfigurations- und Verbindungsparameter für ODBC.

Das folgende Beispiel zeigt eine odbc.ini-Datei, die zwei Datenquellen konfiguriert, die unterschiedliche Formen eines Kontobezeichners in der server-URL verwenden:

  • testodbc1 verwendet einen Kontobezeichner, der einen Kontobezeichner (Kontonamen) zur Angabe des Kontos myaccount der Organisation myorganization verwendet.

  • testodbc2 verwendet den Konto-Locator xy12345 als Kontobezeichner.

    Beachten Sie, dass testodbc2 ein Konto in der Region AWS US West (Oregon) verwendet. Wenn sich das Konto in einer anderen Region befindet oder wenn das Konto einen anderen Cloudanbieter verwendet, müssen Sie nach dem Konto-Locator zusätzliche Segmente angeben.

    [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

Beachten Sie Folgendes:

  • Sowohl testodbc1 als auch testodbc2 haben Standardrollen.

  • testodbc2 hat auch eine Standarddatenbank und ein Standardwarehouse.

Schritt 5: ODBC-Treiber testen

Testen Sie den Treiber mit dem installierten Treibermanager (entweder iODBC oder unixODBC).

Testen mit iODBC

Testen Sie die von Ihnen erstellten DSNs. Geben Sie in der Befehlszeile den DSN-Namen, den Benutzeranmeldenamen und das Kennwort im folgenden Format an:

iodbctest "DSN=<DSN-Name>;UID=<Benutzername>;PWD=<Kennwort>"

Beispiel:

$ 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

Testen mit unixODBC

Testen Sie die DSNs, die Sie mit dem Befehlszeilen-Dienstprogramm isql erstellt haben, das vom Befehl unixODBC bereitgestellt wurde.

Geben Sie in der Befehlszeile den DSN-Namen, den Benutzeranmeldenamen und das Kennwort an.

Beispiel:

$ 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