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

iODBC가 CentOS에 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만 해당) — 선택 사항

참고

yum 또는 TGZ 파일 을 사용하여 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

    참고

    가져온 GPG 키가 rpm 에 없으면 명령은 서명이 정상이 아님을 보고하고 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. 공개 키를 인증 키로 가져옵니다.

    $ 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 드라이버 설치

다음 방식 중 1개를 사용하여 드라이버를 설치합니다.

YUM을 사용하여 드라이버 다운로드 및 설치하기

ODBC 드라이버 2.21.1 이상 버전을 사용하면 yum 을 사용하여 드라이버를 다운로드 및 설치할 수 있습니다.

yum 을 사용하여 Linux용 Snowflake ODBC 드라이버를 다운로드 및 설치하려면:

  1. 이름이 /etc/yum.repos.d/snowflake-odbc.repo 인 파일을 만들고 파일에 다음 텍스트를 추가합니다.

    [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 은 드라이버의 특정 버전 번호(예: 3.2.0)이며 GPG_KEY_ID 는 다음 키 ID 중 하나입니다.

    ODBC 드라이버 버전

    GPG 키 ID

    2.22.1 이상

    630D9F3CAB551AF3

    위의 설정에서 baseurlgpgkey 는 Amazon S3 기반 Snowflake Client Repository 를 가리킵니다. Azure Blob 상의 미러를 대신 사용하려면, 호스트 이름을 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. 다음 명령을 실행하여 드라이버를 설치합니다.

    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 연결 1개를 추가합니다.

  • 사용자의 시스템 수준 /etc/odbcinst.ini 파일에 Snowflake 드라이버 정보를 추가합니다.

  • Snowflake ODBC 드라이버에 필요한 모든 인증 기관(CA) 인증서를 사용자의 시스템 수준 simba.snowflake.ini 파일에 추가합니다.

iodbc_setup.sh 를 실행하면 환경 변수를 설정할 필요가 없습니다.

또는 Snowflake가 시스템 구성을 변경하지 않도록 하려면 셸 구성 파일(예: .profile, .bash_profile)에 다음 환경 변수를 추가합니다.

  • ODBCINI = <경로>/conf/odbc.ini

  • ODBCINSTINI = <경로>/conf/odbcinst.ini

여기서 pathsnowflake_odbc 디렉터리의 위치입니다. 시스템에 다른 ODBC 드라이버를 구성하고 다음 단계에서 기존 odbc.iniodbcinst.ini 파일에 Snowflake ODBC 항목을 추가하려면, ODBCINI 및 ODBCINSTINI가 해당 파일의 위치를 가리키도록 합니다.

unixODBC로 구성하기

터미널 창에서 snowflake_odbc 디렉터리를 변경하고 다음 명령을 실행하여 Snowflake ODBC를 설치합니다.

$ ./unixodbc_setup.sh
Copy

이 스크립트에서 수행되는 단계는 다음과 같습니다.

  • 사용자의 시스템 수준 /etc/odbc.ini 파일에 Snowflake 연결 1개를 추가합니다.

  • 사용자의 시스템 수준 /etc/odbcinst.ini 파일에 Snowflake 드라이버 정보를 추가합니다.

  • Snowflake ODBC 드라이버에 필요한 모든 인증 기관(CA) 인증서를 사용자의 시스템 수준 simba.snowflake.ini 파일에 추가합니다.

unixodbc_setup.sh 를 실행하면 환경 변수를 설정할 필요가 없습니다.

또는 Snowflake가 시스템 구성을 변경하지 않도록 하려면 셸 구성 파일(예: .profile, .bash_profile)에 다음 환경 변수를 추가합니다.

  • ODBCSYSINI = <경로>/conf/

여기서 pathsnowflake_odbc 디렉터리의 위치입니다. 시스템에 다른 ODBC 드라이버를 구성하고 다음 단계에서 기존 odbc.iniodbcinst.ini 파일에 Snowflake ODBC 항목을 추가하려면, ODBCSYSINI가 해당 파일의 위치를 가리키도록 합니다.

4단계: ODBC 드라이버 구성

ODBC 드라이버를 구성하려면 다음 파일에 항목을 추가해야 합니다.

  • <경로>/lib/simba.snowflake.ini

  • /etc/odbcinst.ini (또는 <경로>/conf/odbc.ini, 환경 변수를 사용하는 경우)

  • /etc/odbc.ini (또는 <경로>/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_이름> = <드라이버_이름> 형식의 DSN 이름 및 드라이버 이름(SnowflakeDSIIDriver).

  • 매개 변수:

    • 필수 연결 매개 변수, 예: server.

    • 선택적인 모든 추가 매개 변수, 예: 기본 role, databasewarehouse.

    매개 변수는 <매개 변수_이름> = <값> 의 형식으로 지정됩니다. 각 DSN에 대하여 설정할 수 있는 매개 변수에 대한 자세한 내용은 ODBC 구성 및 연결 매개 변수 를 참조하십시오.

다음 예는 server URL에 계정 식별자 의 다른 형식을 사용하는 데이터 소스 2개를 구성하는 odbc.ini 파일을 보여줍니다.

  • 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.com
    role        = sysadmin
    
    
    [testodbc2]
    Driver      = /usr/jsmith/snowflake_odbc/lib/libSnowflake.so
    Description =
    server      = xy12345.snowflakecomputing.com
    role        = analyst
    database    = sales
    warehouse   = analysis
    
    Copy

다음 사항을 참고하십시오.

  • testodbc1testodbc2 모두에 기본 역할이 있습니다.

  • testodbc2 에도 기본 데이터베이스 및 웨어하우스가 있습니다.

5단계: ODBC 드라이버 테스트

설치된 드라이버 관리자(iODBC 또는 unixODBC)를 사용하여 드라이버를 테스트합니다.

iODBC로 테스트하기

생성한 DSNs를 테스트합니다. 명령줄에 DSN 이름, 사용자 로그인 이름 및 비밀번호를 다음 형식으로 지정합니다.

iodbctest "DSN=<dsn_이름>;UID=<사용자_이름>;PWD=<비밀번호>"

예:

$ 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