安装和配置适用于 Linux 的 ODBC 驱动程序

Linux 利用命名数据源 (DSNs) 将基于 ODBC 的客户端应用程序连接到 Snowflake。您可以选择使用 Snowflake Client Repository 中提供的 TGZ 文件、RPM 包或 DEB 包安装 ODBC 驱动程序。

本主题内容:

先决条件

操作系统

有关 Snowflake 客户端支持的操作系统列表,请参阅 操作系统支持

从 ODBC 3.0.1 版开始,该驱动程序不再支持 CentOS 6 版本。

驱动程序管理器:iODBC 或 unixODBC

需要一个驱动程序管理器来管理 Snowflake 和 ODBC 驱动程序之间的通信。驱动程序支持使用 iODBC unixODBC 作为驱动程序管理器。

iODBC

如果 CentOS 上未安装 iODBC,请以 sudo 身份执行以下命令:

$ yum install libiodbc
Copy

unixODBC

unixODBC 提供 odbcinstisql 命令行实用程序,用于安装、配置和测试驱动程序。要验证 unixODBC 是否已安装,请执行以下命令:

$ which odbcinst

$ which isql
Copy

如果未安装 unixODBC :

  1. sudo 身份执行以下命令:

    $ yum search unixODBC
    
    $ yum install unixODBC.x86_64
    
    Copy
  2. 验证 odbcinst 预计 odbcinst.iniodbc.ini 文件所在的目录:

    $ odbcinst -j
    
    Copy

    位置应为 /etc

第 1 步:验证包签名(仅限 RPM 或 DEB)– 可选

备注

如果使用 yumTGZ 文件 安装 ODBC 驱动程序,请跳过此步骤。

如果使用 RPM 或 DEB 包安装 ODBC 驱动程序,并希望在安装前验证包签名,请执行以下任务:

1.1:下载并导入最新的 Snowflake 公钥

从公钥服务器中,下载并导入正在使用的 ODBC 驱动程序版本的 Snowflake GPG 公钥:

  • 对于版本 2.25.6 及更高版本:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 630D9F3CAB551AF3
  • 对于版本 2.22.1 至 2.25.5:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 37C7086698CB005C
  • 对于版本 2.18.2 至 2.22.0:

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys EC218558EABB25A1
  • 对于版本 2.18.1 及更低版本:

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

备注

如果此命令失败并出现以下错误:

gpg: keyserver receive failed: Server indicated a failure
Copy

然后指定您要将端口 80 用于密钥服务器:

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

1.2:下载 RPM 或 DEB 驱动程序包

从 Snowflake Client Repository 下载包。有关详细信息,请参阅 下载 ODBC 驱动程序

1.3:验证 RPM 或 DEB 驱动程序包的签名

RPM 包签名

  1. 验证已成功导入密钥:

    $ gpg --list-keys
    
    Copy

    该命令应显示 Snowflake 密钥。

  2. 验证签名:

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

    备注

    如果 rpm 没有导入的 GPG 密钥,命令会报告签名状态不为 OK,并发出 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

    如果出现这种情况,请运行以下命令导出 GPG 密钥,将密钥导入 rpm,然后再次验证签名:

    $ 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> 是您在 1.1:下载并导入最新的 Snowflake 公钥 中安装的密钥的 ID。

DEB 包签名

  1. 安装包签名验证工具:

    $ sudo apt-get install debsig-verify
    
    Copy
  2. 将公钥导入 keyring:

    $ 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> 是您在 1.1:下载并导入最新的 Snowflake 公钥 中安装的密钥的 ID。

  3. 为密钥配置策略。有关详细信息,请参阅 /usr/share/doc/debsig-verify。策略必须存储在以下目录中:

    /etc/debsig/policies/<GPG_KEY_ID>
    
    Copy

    其中 <GPG_KEY_ID> 是您在 1.1:下载并导入最新的 Snowflake 公钥 中安装的密钥的 ID。

    将策略存储在名为 policy_name.pol 的文件中,其中 policy_name 是策略名称。策略名称可以使用任何文本字符串,但字符串中不能包含空格。

    下面是 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. 验证签名:

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

备注

默认情况下,dpkg 包签名验证工具不会在安装包时检查签名。如果希望每次运行 dpkg 时都验证签名,请移除 /etc/dpkg/dpkg.cfg 文件中的 --no-debsig 行。

1.4:删除旧的 Snowflake 公钥 – 可选

您的本地环境可以包含多个 GPG 密钥;然而,出于安全原因,Snowflake 会定期轮换 GPG 公钥。作为最佳实践,我们建议在确认最新密钥适用于最新签名的包后删除现有公钥。

要删除密钥,请执行以下命令:

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

第 2 步:安装 ODBC 驱动程序

使用以下方法之一安装驱动程序:

使用 yum 下载并安装驱动程序

如果使用 2.21.1 版 ODBC 驱动程序(及更高版本),则可以使用 yum 下载并安装驱动程序。

要使用 yum 下载并安装适用于 Linux 的 Snowflake ODBC 驱动程序,请执行以下操作:

  1. 创建名为 /etc/yum.repos.d/snowflake-odbc.repo 的文件,并在该文件中添加以下文本:

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

    其中 VERSION_NUMBER 是驱动程序的具体版本号(例如 3.3.1),GPG_KEY_ID 是以下密钥 IDs 之一:

    ODBC 驱动程序版本

    GPG 密钥 ID

    2.22.1 及更高版本

    630D9F3CAB551AF3

    在上述设置中,baseurlgpgkey 指向 Amazon S3 上的 Snowflake Client Repository。如果要使用 Azure BLOB 上的镜像,请将主机名更改为 https://sfc-repo.azure.snowflakecomputing.cn/

    [snowflake-odbc]
    name=snowflake-odbc
    baseurl=https://sfc-repo.azure.snowflakecomputing.cn/odbc/linux/<VERSION_NUMBER>/
    gpgkey=https://sfc-repo.azure.snowflakecomputing.cn/odbc/Snowkey-<GPG_KEY_ID>-gpg
    
    Copy
  2. 运行以下命令安装驱动程序:

    yum install snowflake-odbc
    
    Copy

安装 TGZ 文件

使用 之前下载的 TGZ 文件 安装适用于 Linux 的 Snowflake ODBC 驱动程序。

  1. 将下载的文件 (snowflake_linux_x8664_odbc-version.tgz) 复制到工作目录。

  2. 解压文件:

    $ gunzip snowflake_linux_x8664_odbc-<version>.tgz
    
    Copy
  3. 从 .tar 文件中提取文件:

    $ tar -xvf snowflake_linux_x8664_odbc-<version>.tar
    
    Copy
  4. 将生成的 snowflake_odbc 文件夹复制到要安装驱动程序的目录下。记下该目录。在稍后的说明中,您将需要这个位置。

安装 RPM 包

备注

RPM 包需要使用 unixODBC 作为驱动程序管理器。

要使用 先前下载的 RPM 包 安装适用于 Linux 的 Snowflake ODBC 驱动程序,可 选择验证包签名,然后运行以下命令:

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

备注

安装目录为 /usr/lib64/snowflake/odbc/。在稍后的说明中,您将需要这个位置。

如果驱动程序找不到该库,则会显示 Unable to locate SQLGetPrivateProfileString function 错误。在这种情况下,必须在 simba.snowflake.ini 配置文件中使用系统中驱动程序管理器的名称手动设置 ODBCInstLib=<driver_manager_path>。有关更多信息,请参阅 配置 ODBC 驱动程序

例如 ODBCInstLib=/usr/lib/x86_64-linux-gnu/libodbcinst.so.2

安装 DEB 包

备注

DEB 包需要使用 unixODBC 作为驱动程序管理器。

要使用 先前下载的 DEB 包 安装适用于 Linux 的 Snowflake ODBC 驱动程序,可 选择验证包签名,然后运行以下命令:

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

如果未安装包管理器所需的任何依赖项,该命令可能会失败。如果出现这种情况,请立即安装:

$ sudo apt-get install -f
Copy

备注

安装目录为 /usr/lib/snowflake/odbc/。在稍后的说明中,您将需要这个位置。

第 3 步:配置环境(仅限 TGZ)

备注

如果使用 RPM 或 DEB 包文件安装了 ODBC 驱动程序,请跳过此步骤。

如果使用 TGZ 文件安装,请使用安装的驱动程序管理器(iODBC 或 unixODBC)配置环境。

使用 iODBC 进行配置

在终端窗口中,切换到 snowflake_odbc 目录,运行以下命令安装 Snowflake ODBC:

$ ./iodbc_setup.sh
Copy

该脚本完成以下步骤:

  • 在系统级 /etc/odbc.ini 文件中添加一个 Snowflake 连接。

  • 在系统级 /etc/odbcinst.ini 文件中添加 Snowflake 驱动程序信息。

  • 在系统级 simba.snowflake.ini 文件中添加 Snowflake ODBC 驱动程序所需的所有证书授权 (CA) 证书。

运行 iodbc_setup.sh 时,无需设置任何环境变量。

另外,如果不想让 Snowflake 更改系统配置,可在 shell 配置文件(例如 .profile.bash_profile)中添加以下环境变量:

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

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

其中 pathsnowflake_odbc 目录的位置。如果您已在系统中配置了其他 ODBC 驱动程序,并计划在下一步中将 Snowflake ODBC 条目添加到现有的 odbc.iniodbcinst.ini 文件中,则应将 ODBCINI 和 ODBCINSTINI 指向这些文件的位置。

使用 unixODBC 进行配置

在终端窗口中,切换到 snowflake_odbc 目录,运行以下命令安装 Snowflake ODBC:

$ ./unixodbc_setup.sh
Copy

该脚本完成以下步骤:

  • 在系统级 /etc/odbc.ini 文件中添加 Snowflake 连接。

  • 在系统级 /etc/odbcinst.ini 文件中添加 Snowflake 驱动程序信息。

  • 在系统级 simba.snowflake.ini 文件中添加 Snowflake ODBC 驱动程序所需的所有证书授权 (CA) 证书。

运行 unixodbc_setup.sh 时,无需设置任何环境变量。

另外,如果不想让 Snowflake 更改系统配置,可在 shell 配置文件(例如 .profile.bash_profile)中添加以下环境变量:

  • ODBCSYSINI = <path>/conf/

其中 pathsnowflake_odbc 目录的位置。如果您已在系统中配置了其他 ODBC 驱动程序,并计划在下一步中将 Snowflake ODBC 条目添加到现有的 odbc.iniodbcinst.ini 文件中,则请将 ODBCSYSINI 指向这些文件的位置。

第 4 步:配置 ODBC 驱动程序

配置 ODBC 驱动程序需要在以下文件中添加条目:

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

  • /etc/odbcinst.ini (或者 <path>/conf/odbc.ini,如果使用环境变量)

  • /etc/odbc.ini (或者 <path>/conf/odbcinst.ini,如果使用环境变量)

其中 pathsnowflake_odbc 目录的位置。

4.1:simba.snowflake.ini 文件(驱动程序管理器和日志)

simba.snowflake.ini 文件中添加以下条目:

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

其中:

  • pathsnowflake_odbc 目录的位置。

  • driver_manager_path 是驱动程序管理器目录的位置:

    • iODBC:ODBCInstLib=libiodbcinst.so.2

    • unixODBC:ODBCInstLib=libodbcinst.so

    备注

    如果 LD_LIBRARY_PATH 环境变量中不包含驱动程序管理器目录,请在此处指定驱动程序管理器库的完整路径。

确认您在日志路径上有写入权限。

ANSIENCODING 参数指定应用程序的字符编码。默认为 UTF-8。该参数仅供 Snowflake 使用,客户不应更改其值。

4.2:odbcinst.ini 文件(驱动程序注册)

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

其中 pathsnowflake_odbc 目录的位置。

4.3:odbc.ini 文件(DSN 条目)

对于 每个 DSN,在 odbc.ini 文件中添加以下条目:

  • DSN 名称和驱动程序名称 (SnowflakeDSIIDriver),格式为 <dsn_name> = <driver_name>

  • 参数:

    • 必需的连接参数,例如 server

    • 任何其他可选参数,例如默认的 roledatabasewarehouse

    参数指定形式为 <parameter_name> = <value>。有关可为每个 DSN 设置的参数的详细信息,请参阅 ODBC 配置和连接参数

以下示例说明了一个 odbc.ini 文件,该文件配置两个数据源,这两个数据源在 server URL 中使用不同形式的 账户标识符

  • testodbc1 使用一个使用 账户标识符 的账户标识符,该账户标识符在组织 myorganization 中指定账户 myaccount

  • testodbc2 使用 账户定位器 xy12345 作为账户标识符。

    请注意,testodbc2 使用 AWS US 西部(俄勒冈)区域中的账户。如果账户位于不同的区域,或者账户使用不同的云提供商,则需要 在账户定位器之后指定其他分段

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

请注意以下事项:

  • testodbc1testodbc2 都有默认角色。

  • testodbc2 还有默认的数据库和仓库。

第 5 步:测试 ODBC 驱动程序

使用已安装的驱动程序管理器( iODBC 或 unixODBC)测试驱动程序。

使用 iODBC 进行测试

测试您创建的 DSNs。在命令行中,使用以下格式指定 DSN 名称、用户登录名和密码:

iodbctest "DSN=<dsn_name>;UID=<user_name>;PWD=<password>"

例如:

$ 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

使用 unixODBC 进行测试

使用 unixODBC 提供的 isql 命令行实用程序测试您创建的 DSNs。

在命令行中指定 DSN 名称、用户登录名和密码。

例如:

$ 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
语言: 中文