USER MANUALS


Linux とその他の UNIX での ODBC ドライバーの構成

Denodo Platform は、ODBC PostgreSQL ドライバーをベースとした ODBC ドライバーを提供しています。unixODBC ドライバーマネージャー用と iODBC ドライバーマネージャー用にそれぞれ 1 つのバージョンがあります。

Denodo ODBC ドライバーは、 クライアントアプリケーションが実行されるマシン にインストールする必要があります。インストールするには、以下の手順に従って実施してください。

  1. 適切な ODBC ドライバーの取得

  2. unixODBC のインストール

  3. unixODBC への ODBC ドライバーの登録

  4. Denodo を参照するデータソース (DSN) の登録

適切な ODBC ドライバーの取得

Denodo ODBC ドライバーには複数の種類があります。ここでは、どの種類を選択する必要があるかについて説明します。

  1. パッケージ denodo-vdp-odbcdriver-linux.zip を取得します。そのためには、以下の手順に従います。

    1. インストール (<DENODO_HOME>/tools/client-drivers/odbc/denodo-vdp-odbcdriver-linux.zip) からコピーします。

    2. または、Denodo Community の ODBC ページ からダウンロードします。

      このページで、Linux 用のドライバー (名前は -linux で終わります) をダウンロードします。接続する Denodo サーバー 以前の バージョンのパッケージを選択してください。たとえば、Denodo サーバーに更新プログラム 7.0 20181011 が適用されている場合、パッケージ denodo-vdp-odbcdriver-7.0-update-20190312-linux はこれより新しいため、ダウンロード しないでください

      このドライバーの下位互換性に関するポリシーについては、「 ODBC 経由でのアクセス 」を参照してください。

  2. denodo-vdp-odbcdriver-linux.tar.gz ファイルの内容を展開します。

    tar -xzf denodo-vdp-odbcdriver-linux.tar.gz --directory /opt
    

    これにより、/opt/denodo-vdp-odbcdriver-linux フォルダが作成されます。

  3. 該当する種類のドライバーを選択し、そのすべてのファイルを、クライアントアプリケーションが実行されるホストにコピーします。以下のオプションを選択できます。

    • unixodbc_x86: 32 ビットクライアント用の ODBC ドライバーと unixODBC ドライバーマネージャー

    • unixodbc_x64: 64 ビットクライアント用の ODBC ドライバーと unixODBC ドライバーマネージャー

    • iodbc_x86: 32 ビットクライアント用の ODBC ドライバーと iODBC ドライバーマネージャー

    • iodbc_x64: 64 ビットクライアント用の ODBC ドライバーと iODBC ドライバーマネージャー

    たとえば、unixODBC ドライバーマネージャーを使用して 32 ビットアプリケーションに接続するには、 unixodbc_x86 フォルダをクライアントアプリケーションが実行されるホストにコピーします。

    Denodo は、各ドライバーの ANSI バージョンも提供しています。これらは、「a」で終わる名前のファイルです (unixodbc_x86/denodoodbca.so など)。ANSI バージョンは、ご使用の環境で Unicode エンコードが有効でない場合にのみ使用してください。

Denodo ODBC ドライバーを読み込む際、以下の共有ライブラリ (記載のバージョンと互換性のあるバージョンのもの) にアクセスできる必要があります。

  • libc.so.6: GLIBC_2.14 GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.2.5

  • libpthread.so.0: GLIBC_2.2.5

  • libdl.so.2: GLIBC_2.2.5

  • libgssapi_krb5.so.2: gssapi_krb5_2_MIT

unixODBC のインストール

Linux にはデフォルトでは ODBC ドライバーマネージャーが付属していないため、ユーザーがインストールする必要があります。ここでは、 unixODBC をインストールして構成する方法について説明します。また、Denodo は、iODBC で使用するコンパイル済みの ODBC ドライバーも提供しています。

重要

unixODBC および Denodo ODBC ドライバーは、クライアントアプリケーションが実行されるホストにインストールします。

unixODBC がインストール済みかどうかを確認するには、以下の一連のコマンドを実行します。これらは、コマンドラインユーティリティの odbcinstisql がインストール済みかどうかをチェックします。

which isql

which odbcinst

両方のコマンドがファイルのパスを返した場合は、次のセクションに進みます。

unixODBC がインストールされていない場合は、以下の手順を実行します。

  1. RPM パッケージングシステムを使用する Linux ディストリビューション (Red Hat、CentOS など) の場合は以下のコマンドを実行します。

    sudo yum install unixODBC
    

    Debian ベースの Linux ディストリビューション (Ubuntu など) の場合は以下のコマンドを実行します。

    sudo apt-get install unixodbc
    
  2. 以下のコマンドを実行して、unixODBC が正しくインストールされていることを確認します。

    odbcinst -j
    

unixODBC への Denodo ODBC ドライバーの登録

unixODBC をインストールしたら、ODBC ドライバーを登録します。以下の手順に従って実施してください。

  1. 次の内容が含まれている denodoODBCDriver.template ファイルを作成します。

    1
    2
    3
    4
    [DenodoODBCDriver]
    Description=ODBC driver of Denodo
    Driver=/opt/denodo-odbc-driver/unixodbc_x86/denodoodbc.so
    UsageCount=1
    

    3 行目を変更して、使用する種類の ODBC ドライバーを指定します (unixodbc_x86、unixodbc_x64 など)。

  2. 次のコマンドを実行して、Denodo ドライバーを ODBC ドライバーマネージャーに登録します。

    sudo odbcinst -install -driver -file denodoODBCDriver.template
    

ドライバーマネージャーに登録されている ODBC ドライバーのリストを確認するには、次のコマンドを実行します。

sudo odbcinst -query -driver

返される結果には、新しいドライバー DenodoODBCDriver が表示されます。

ドライバーをアンインストールするには、次のコマンドを実行します。

sudo odbcinst -uninstall -driver -name DenodoODBCDriver

unixODBC へのデータソース (DSN) の登録

ここでは、DSN を unixODBC に登録する方法について説明します。

  1. 次の内容が含まれている denodoDSN.template ファイルを作成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[Denodo_DSN]
Description = Denodo connection
Driver = DenodoODBCDriver
Servername = <host name>
    # Default port of the ODBC interface of Virtual DataPort
Port = 9996
UserName = <Virtual DataPort user name>
Password = <Password>
Database = <Virtual DataPort database>
UserAgent = <name of the application that will use the DSN>
Protocol = 7.4
BoolsAsChar = 0
ByteaAsLongVarBinary= 1
ConnSettings = SET QUERYTIMEOUT TO 3600000; SET I18N TO us_pst; /*krbsrvname=HTTP*/
Debug = 0
Commlog = 0
FakeOidIndex = 0
Fetch = 1000
Ksqo = 0
LFConversion = 1
Optimizer = 0
ReadOnly = 0
RowVersioning = 0
ShowOidColumn = 0
ShowSystemTables = 0
# Uncomment "Sslmode" if SSL is enabled in Virtual DataPort
# Sslmode = require
UniqueIndex = 1
UpdatableCursors = 0
UseDeclareFetch = 1
UseServerSidePrepare= 0
UseKerberos = 0
KeepaliveTime=60
KeepaliveInterval=5
InfrastructureProvider = <Name of infrastructure provider>
InfrastructureRegion = <Name of infrastructure region>

7 行目 (Password) で、一部のツールでは DSN 名が要求され、さらに DSN で定義されたユーザーとパスワードを使用せずに、ユーザーとパスワードが要求されることがあります。パスワードに %{}+ が含まれている場合、接続できないことがあります。その場合は、 %%25+%2B{%7B}%7D でエスケープする必要があります。

8 行目 (Database) で、データベースの名前に非 ASCII 文字が含まれている場合、これらを URL エンコードする必要があります。たとえば、データベースの名前が「テスト」の場合、このプロパティを %E3%83%86%E3%82%B9%E3%83%88 に設定します。

30 行目 (UseDeclareFetch) で、値が 1 の場合、DSN は DECLARE CURSOR/FETCH を使用して SELECT ステートメントを処理します。これにより、DSN は結果の行を一度にすべてではなくブロック単位で取得します。 Fetch プロパティは、各ブロックの行数を設定します。このプロパティは、JDBC コネクションの「Fetch size」に相当するものです。

14 行目と 15 行目 (DebugCommlog) で、値が 1 の場合、ドライバーは、 /tmp ディレクトリに作成されたファイルに詳細な ODBC 情報のログを記録します。本番環境では、このプロパティの値を 0 に設定することをお勧めします。これは、すべてのリクエストのログを記録するとドライバーのパフォーマンスが低下し、ログファイルのサイズが非常に大きくなる場合があるためです。

これらのファイルを別のディレクトリに保存するには、 DenodoODBC Unicode または DenodoODBC ANSI セクションを odbcinst.ini ファイルに作成し、次のプロパティを定義します。

Logdir = /path/to/logs

33 行目と 34 行目には、TCP の keepAlive 設定に関連する 2 つのオプションがあります。これらのオプションについては、「 Windows での DSN のセットアップ 」のページを参照してください。

35 行目と 36 行目には、クラウドプロバイダーからプロバイダーとリージョンを指定する 2 つのオプションがあります。これらのオプションがどのように機能するかについては、「 クラウドインフラストラクチャのプロパティの設定 」のセクションを参照してください。

13 行目 (ConnSettings) で、以下のステートメントを追加することで、Virtual DataPort に対して確立されたコネクションのプロパティを設定できます。

  1. SET QUERYTIMEOUT TO <value> は、クエリのタイムアウトを変更します (値はミリ秒単位)。

  2. SET i18n TO <i18n> は、コネクションのロケールを変更します。

たとえば、クエリのデフォルトのタイムアウトを 1 時間に設定するには、 ConnSettings プロパティの値を次のように設定します。

ConnSettings=SET QUERYTIMEOUT TO 3600000; SET I18N TO us_pst

各ステートメント間の ; に注意してください。

これらのプロパティの機能とそのデフォルト値については、「 ODBC ドライバーのパラメータとそのデフォルト値 」を参照してください。

通信を保護するために Virtual DataPort サーバーで SSL を有効にした場合は、次のプロパティをこの構成ファイルに追加します。

Sslmode=require
  1. Kerberos 認証を使用して Virtual DataPort に接続するには、次の ConnSettings プロパティを追加します。

    /*krbsrvname=HTTP*/
    

    重要

    この行は、 ConnSettings プロパティの最後に追加する必要があります。

    接続しようとしている Denodo データベースで Kerberos 認証が有効になっている場合、ドライバーはプロパティ「UserName」および「Password」の値を無視します。代わりに、システムキャッシュから Kerberos チケットを取得します。また ODBC コネクションではデータベースレベルで Kerberos 認証を有効にする必要はないため、最新の Denodo ODBC ドライバーを使用している場合は、 UseKerberos プロパティを 1 に設定して、クライアント側で Kerberos 認証を有効にすることができます。

    Kerberos 認証を使用できるようにするには、DSN の構成が以下の条件を満たしている必要があります。

    1. クライアントが Windows ドメインに属している。これは、ODBC ドライバーがオペレーティングシステムのチケットキャッシュを使用して「チケット保証チケット」(TGT) を取得するためです。

    2. Servername プロパティに、Denodo サーバーの完全修飾ドメイン名を入力する。つまり、Denodo サーバーの Kerberos 構成の [Server principal] フィールドが HTTP/denodo-prod.subnet1.contoso.com@CONTOSO.COM の場合、「 denodo-prod.subnet1.contoso.com 」と入力します。

  2. UserAgent プロパティはオプションですが、これをすべての DSN に追加することをお勧めします。その理由は、ユーザーエージェントを使用することで、各コネクションを開くアプリケーションと、各アプリケーションが送信するリクエストを識別できるためです。これは、特定のクライアントが原因で発生した問題のデバッグやログのために役立ちます。

  3. ユーザーとパスワードではなく、OAuth 認証を使用してコネクションを確立するには、使用する OAuth 認証フローに応じて以下のパラメータのいくつかを指定する必要があります。

OAuth 認証のパラメータ

プロパティ

意味

UseOAuth2

1 に設定します。OAuth 認証を使用してコネクションを開くようにドライバーに指示します。

TokenEndpoint

OAuth サーバーによって公開される URL。access_token をリクエストするために使用されます。例: https://login.microsoftonline.com/common/oauth2/token

AuthEndpoint

OAuth サーバーから公開されている URL。認可コードのリクエストで使用します。たとえば、https://login.microsoftonline.com/common/oauth2/authorize です。

ClientId

アプリケーションのクライアント ID。通常はクライアントアプリケーションを ID プロバイダーに登録するときに取得します。

ClientSecret

アプリケーションのクライアントシークレット

スコープ

リクエストされるスコープのアクセス許可のスペースで区切られたリスト。

ExtraParams

ドライバーが OAuth トークンを取得するために送信する HTTP リクエストの本文に追加されるパラメータ。このパラメータの値の構文は param1=value1&param2=value2&... です。

AccessToken

Virtual DataPort サーバーとのコネクションで使用するアクセストークン。

RefreshToken

提供されたアクセストークンの有効期限が終了している場合は、トークンを更新して新しいアクセストークンを取得します。

OAuthServiceTimeout

認可コードを取得するサービスが応答の待機を終了するまでのタイムアウト期間 (秒単位)。認可プロセスで応答を待機しながらサービスがアイドル状態を維持する最長時間を指定します。デフォルト値は 120 です。

OAuthServiceMinPort

認可コードを取得するサービスで使用するポート範囲の下限を指定します。デフォルト値は 8000 です。

OAuthServiceMaxPort

認可コードを取得するサービスで使用するポート範囲の上限を指定します。デフォルト値は 9000 です。

OAuthCredentialsCacheFilePath

ID プロバイダーへの不要なリクエストを回避するために、トークンを保存しておくファイルへのファイルパス。@{HOME} 補間変数を使用して、ユーザーのホームディレクトリを参照できます。

UseIdToken

1 の場合、ドライバーは「id_token」を使用して認証を行います。 0 の場合は「access_token」を使用します。「OpenID Connect」を使用する環境では、 1 に設定してください。

OAuthSSLVerify

1 の場合、ドライバーは ID プロバイダーの SSL 証明書を検証します。 0 の場合は検証しません。デフォルト値は 1 です。

現在のところ、ODBC ドライバーは、以下に挙げる 3 種類の OAuth 認証フローをサポートしていますが、それぞれで異なるパラメータを設定する必要があります。実際のシナリオに応じて適切なパラメータを選択して設定します。

  1. リソース所有者資格情報フロー (ROPC)。クライアントアプリケーションがコネクションを開くとき、ドライバーが ID プロバイダーに対して OAuth トークンをリクエストし、そのトークンを使ってコネクションを確立します。

    • User と Password

    • TokenEndpoint

    • ClientId.

    • ClientSecret.

    • スコープ

    • ExtraParams (オプション)

    • UseIdToken

    • OAuthSSLVerify.

  2. 更新トークンフロー。ドライバーは、提供されたアクセストークンを使用してコネクションを確立します。そのトークンの有効期限が終了している場合は、更新トークンを使用して ID プロバイダーに新しい OAuth トークンがリクエストされます。

    • TokenEndpoint

    • ClientId.

    • ClientSecret.

    • スコープ

    • ExtraParams (オプション)

    • Access token

    • Refresh token

    • OAuthCredentialsCacheFilePath (オプション)

    • UseIdToken

    • OAuthSSLVerify.

  3. 認可コードフロー。ドライバーは、Web ブラウザーを使用して ID プロバイダーにアクセストークンをリクエストします。クライアントアプリケーションで何らかのコネクションプールを実装している場合は、Web ブラウザーで不要なタブが開かないように、資格情報キャッシュファイルの設定を強くお勧めします。

    • Authorization Endpoint

    • TokenEndpoint

    • ClientId.

    • ClientSecret.

    • スコープ

    • ExtraParams (オプション)

    • OAuthCredentialsCacheFilePath (オプション)

    • OAuthServiceTimeout (オプション)

    • OAuthServiceMinPort (オプション)

    • OAuthServiceMaxPort (オプション)

    • UseIdToken

    • OAuthSSLVerify.

    OAuth を使用して Virtual DataPort に接続する前に、 Virtual DataPort で OAuth を有効にする 必要があります。有効にしなかった場合、OAuth を使用したコネクションは失敗します。

  1. 次のコマンドを実行して新しい DSN を登録します。

sudo odbcinst -install -s -l -f denodoDSN.template

パラメータ -l は、DSN を「システム DSN」として登録します。「システム DSN」は、すべてのユーザーが使用できます。

「システム DSN」を登録するための十分な権限がない場合は、 -l-h に置き換えて、代わりに DSN を「ユーザー DSN」として登録します。これを行う場合、この DSN にアクセスする必要があるクライアントアプリケーションを実行するユーザーと同じ名前でこのコマンドを実行します。「ユーザー DSN」はその DSN を登録したユーザーのみが使用できるためです。

ODBC ドライバーマネージャーに登録されている DSN のリストを確認するには、次のコマンドを実行します。

sudo odbcinst -query -s

返される結果には、新しい DSN Denodo_DSN が表示されます。

  1. unixODBC に付属のコマンドラインユーティリティ「isql」を使用し、次のコマンドを実行して DSN をテストします。

isql -v Denodo_DSN

以下のようなテキストが出力されます。

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

任意のクエリ (SELECT 1 など) を実行してから「 quit 」と入力してこのシェルを終了します。

DSN をセットアップしたら、「 サードパーティアプリケーションとの統合 」を参照することをお勧めします。

UnixODBC のコンパイル

ご使用のオペレーティングシステムのパッケージマネージャーを使用して unixODBC をインストールできない場合は、unixODBC をダウンロードしてコンパイルします。そのためには、以下の手順に従って実施してください。

  1. http://www.unixodbc.org/download.html からソースコードの最新バージョンをダウンロードします。

  2. 以下のコマンドを実行して、ソースコードを展開してコンパイルします。

    tar -zxf unixODBC*.tar.gz
    cd unixODBC
    ./configure.sh
    make
    
  1. 次のコマンドを実行します。

    sudo make install
    

問題のトラブルシューティング

この DSN を使用しようとしたときに、アプリケーションが次のようなエラーを返す場合があります。

[unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)

この場合は、以下の手順に従います。

  1. DSN を作成したホストに接続します。

  2. 以下の各ファイルが存在することを確認します。

    /usr/local/lib64/libodbc.so
    /usr/local/lib64/libodbcinst.so
    

    または

    /usr/local/lib/libodbc.so
    /usr/local/lib/libodbcinst.so
    

    これらのファイルの場所は、Linux/Unix ディストリビューションによって異なる可能性があります。

  3. ~/.bash_profile ファイルを編集して、以下のテキストを末尾に追加します。

export LD_PRELOAD=/usr/local/lib/libodbc.so:/usr/local/lib/libodbcinst.so:$LD_PRELOAD

LD_PRELOAD 変数をこのように変更することによって、他のライブラリによって提供されるものではなく、unixODBC によって提供される libodbc.so ファイルと libodbcinst.so ファイルがアプリケーションによって必ず読み込まれるようにします。

注釈

上記の 2 つのファイルが、 lib ではなく lib64 に存在する場合は、それに合わせて適宜変更してください。

  1. このユーザーアカウントからいったんログアウトして再度ログインすると、ファイル .bash_profile に対する変更が適用されます。

Add feedback