Linux とその他の UNIX での ODBC ドライバーの構成¶
Denodo Platform は、ODBC PostgreSQL ドライバーをベースとした ODBC ドライバーを提供しています。unixODBC ドライバーマネージャー用と iODBC ドライバーマネージャー用にそれぞれ 1 つのバージョンがあります。
Denodo ODBC ドライバーは、 クライアントアプリケーションが実行されるマシン にインストールする必要があります。インストールするには、以下の手順に従って実施してください。
適切な ODBC ドライバーの取得
unixODBC のインストール
unixODBC への ODBC ドライバーの登録
Denodo を参照するデータソース (DSN) の登録
適切な ODBC ドライバーの取得¶
Denodo ODBC ドライバーには複数の種類があります。ここでは、どの種類を選択する必要があるかについて説明します。
パッケージ
denodo-vdp-odbcdriver-linux.zip
を取得します。そのためには、以下の手順に従います。インストール (
<DENODO_HOME>/tools/client-drivers/odbc/denodo-vdp-odbcdriver-linux.zip
) からコピーします。または、Denodo Community の ODBC ページ からダウンロードします。
このページで、Linux 用のドライバー (名前は -linux で終わります) をダウンロードします。接続する Denodo サーバー 以前の バージョンのパッケージを選択してください。たとえば、Denodo サーバーに更新プログラム 7.0 20181011 が適用されている場合、パッケージ denodo-vdp-odbcdriver-7.0-update-20190312-linux はこれより新しいため、ダウンロード しないでください 。
このドライバーの下位互換性に関するポリシーについては、「 ODBC 経由でのアクセス 」を参照してください。
denodo-vdp-odbcdriver-linux.tar.gz
ファイルの内容を展開します。tar -xzf denodo-vdp-odbcdriver-linux.tar.gz --directory /opt
これにより、/opt/denodo-vdp-odbcdriver-linux フォルダが作成されます。
該当する種類のドライバーを選択し、そのすべてのファイルを、クライアントアプリケーションが実行されるホストにコピーします。以下のオプションを選択できます。
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 がインストール済みかどうかを確認するには、以下の一連のコマンドを実行します。これらは、コマンドラインユーティリティの odbcinst
と isql
がインストール済みかどうかをチェックします。
which isql
which odbcinst
両方のコマンドがファイルのパスを返した場合は、次のセクションに進みます。
unixODBC がインストールされていない場合は、以下の手順を実行します。
RPM パッケージングシステムを使用する Linux ディストリビューション (Red Hat、CentOS など) の場合は以下のコマンドを実行します。
sudo yum install unixODBC
Debian ベースの Linux ディストリビューション (Ubuntu など) の場合は以下のコマンドを実行します。
sudo apt-get install unixodbc
以下のコマンドを実行して、unixODBC が正しくインストールされていることを確認します。
odbcinst -j
unixODBC への Denodo ODBC ドライバーの登録¶
unixODBC をインストールしたら、ODBC ドライバーを登録します。以下の手順に従って実施してください。
次の内容が含まれている
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 など)。
次のコマンドを実行して、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 に登録する方法について説明します。
次の内容が含まれている
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 行目 (
Debug
とCommlog
) で、値が1
の場合、ドライバーは、/tmp
ディレクトリに作成されたファイルに詳細な ODBC 情報のログを記録します。本番環境では、このプロパティの値を0
に設定することをお勧めします。これは、すべてのリクエストのログを記録するとドライバーのパフォーマンスが低下し、ログファイルのサイズが非常に大きくなる場合があるためです。これらのファイルを別のディレクトリに保存するには、
DenodoODBC Unicode
またはDenodoODBC ANSI
セクションをodbcinst.ini
ファイルに作成し、次のプロパティを定義します。Logdir = /path/to/logs33 行目と 34 行目には、TCP の keepAlive 設定に関連する 2 つのオプションがあります。これらのオプションについては、「 Windows での DSN のセットアップ 」のページを参照してください。
35 行目と 36 行目には、クラウドプロバイダーからプロバイダーとリージョンを指定する 2 つのオプションがあります。これらのオプションがどのように機能するかについては、「 クラウドインフラストラクチャのプロパティの設定 」のセクションを参照してください。
13 行目 (
ConnSettings
) で、以下のステートメントを追加することで、Virtual DataPort に対して確立されたコネクションのプロパティを設定できます。
SET QUERYTIMEOUT TO <value>
は、クエリのタイムアウトを変更します (値はミリ秒単位)。
SET i18n TO <i18n>
は、コネクションのロケールを変更します。たとえば、クエリのデフォルトのタイムアウトを 1 時間に設定するには、
ConnSettings
プロパティの値を次のように設定します。ConnSettings=SET QUERYTIMEOUT TO 3600000; SET I18N TO us_pst各ステートメント間の
;
に注意してください。これらのプロパティの機能とそのデフォルト値については、「 ODBC ドライバーのパラメータとそのデフォルト値 」を参照してください。
通信を保護するために Virtual DataPort サーバーで SSL を有効にした場合は、次のプロパティをこの構成ファイルに追加します。
Sslmode=require
Kerberos 認証を使用して Virtual DataPort に接続するには、次の
ConnSettings
プロパティを追加します。/*krbsrvname=HTTP*/
重要
この行は、
ConnSettings
プロパティの最後に追加する必要があります。接続しようとしている Denodo データベースで Kerberos 認証が有効になっている場合、ドライバーはプロパティ「UserName」および「Password」の値を無視します。代わりに、システムキャッシュから Kerberos チケットを取得します。また ODBC コネクションではデータベースレベルで Kerberos 認証を有効にする必要はないため、最新の Denodo ODBC ドライバーを使用している場合は、
UseKerberos
プロパティを1
に設定して、クライアント側で Kerberos 認証を有効にすることができます。Kerberos 認証を使用できるようにするには、DSN の構成が以下の条件を満たしている必要があります。
クライアントが Windows ドメインに属している。これは、ODBC ドライバーがオペレーティングシステムのチケットキャッシュを使用して「チケット保証チケット」(TGT) を取得するためです。
Servername
プロパティに、Denodo サーバーの完全修飾ドメイン名を入力する。つまり、Denodo サーバーの Kerberos 構成の [Server principal] フィールドがHTTP/denodo-prod.subnet1.contoso.com@CONTOSO.COM
の場合、「denodo-prod.subnet1.contoso.com
」と入力します。
UserAgent
プロパティはオプションですが、これをすべての DSN に追加することをお勧めします。その理由は、ユーザーエージェントを使用することで、各コネクションを開くアプリケーションと、各アプリケーションが送信するリクエストを識別できるためです。これは、特定のクライアントが原因で発生した問題のデバッグやログのために役立ちます。ユーザーとパスワードではなく、OAuth 認証を使用してコネクションを確立するには、使用する OAuth 認証フローに応じて以下のパラメータのいくつかを指定する必要があります。
プロパティ |
意味 |
---|---|
UseOAuth2 |
|
TokenEndpoint |
OAuth サーバーによって公開される URL。access_token をリクエストするために使用されます。例: |
AuthEndpoint |
OAuth サーバーから公開されている URL。認可コードのリクエストで使用します。たとえば、 |
ClientId |
アプリケーションのクライアント ID。通常はクライアントアプリケーションを ID プロバイダーに登録するときに取得します。 |
ClientSecret |
アプリケーションのクライアントシークレット |
スコープ |
リクエストされるスコープのアクセス許可のスペースで区切られたリスト。 |
ExtraParams |
ドライバーが OAuth トークンを取得するために送信する HTTP リクエストの本文に追加されるパラメータ。このパラメータの値の構文は |
AccessToken |
Virtual DataPort サーバーとのコネクションで使用するアクセストークン。 |
RefreshToken |
提供されたアクセストークンの有効期限が終了している場合は、トークンを更新して新しいアクセストークンを取得します。 |
OAuthServiceTimeout |
認可コードを取得するサービスが応答の待機を終了するまでのタイムアウト期間 (秒単位)。認可プロセスで応答を待機しながらサービスがアイドル状態を維持する最長時間を指定します。デフォルト値は 120 です。 |
OAuthServiceMinPort |
認可コードを取得するサービスで使用するポート範囲の下限を指定します。デフォルト値は 8000 です。 |
OAuthServiceMaxPort |
認可コードを取得するサービスで使用するポート範囲の上限を指定します。デフォルト値は 9000 です。 |
OAuthCredentialsCacheFilePath |
ID プロバイダーへの不要なリクエストを回避するために、トークンを保存しておくファイルへのファイルパス。 |
UseIdToken |
|
OAuthSSLVerify |
|
現在のところ、ODBC ドライバーは、以下に挙げる 3 種類の OAuth 認証フローをサポートしていますが、それぞれで異なるパラメータを設定する必要があります。実際のシナリオに応じて適切なパラメータを選択して設定します。
リソース所有者資格情報フロー (ROPC)。クライアントアプリケーションがコネクションを開くとき、ドライバーが ID プロバイダーに対して OAuth トークンをリクエストし、そのトークンを使ってコネクションを確立します。
User と Password
TokenEndpoint
ClientId.
ClientSecret.
スコープ
ExtraParams (オプション)
UseIdToken
OAuthSSLVerify.
更新トークンフロー。ドライバーは、提供されたアクセストークンを使用してコネクションを確立します。そのトークンの有効期限が終了している場合は、更新トークンを使用して ID プロバイダーに新しい OAuth トークンがリクエストされます。
TokenEndpoint
ClientId.
ClientSecret.
スコープ
ExtraParams (オプション)
Access token
Refresh token
OAuthCredentialsCacheFilePath (オプション)
UseIdToken
OAuthSSLVerify.
認可コードフロー。ドライバーは、Web ブラウザーを使用して ID プロバイダーにアクセストークンをリクエストします。クライアントアプリケーションで何らかのコネクションプールを実装している場合は、Web ブラウザーで不要なタブが開かないように、資格情報キャッシュファイルの設定を強くお勧めします。
Authorization Endpoint
TokenEndpoint
ClientId.
ClientSecret.
スコープ
ExtraParams (オプション)
OAuthCredentialsCacheFilePath (オプション)
OAuthServiceTimeout (オプション)
OAuthServiceMinPort (オプション)
OAuthServiceMaxPort (オプション)
UseIdToken
OAuthSSLVerify.
OAuth を使用して Virtual DataPort に接続する前に、 Virtual DataPort で OAuth を有効にする 必要があります。有効にしなかった場合、OAuth を使用したコネクションは失敗します。
次のコマンドを実行して新しい 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
が表示されます。
unixODBC に付属のコマンドラインユーティリティ「isql」を使用し、次のコマンドを実行して DSN をテストします。
isql -v Denodo_DSN
以下のようなテキストが出力されます。
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
任意のクエリ (
SELECT 1
など) を実行してから「quit
」と入力してこのシェルを終了します。
DSN をセットアップしたら、「 サードパーティアプリケーションとの統合 」を参照することをお勧めします。
UnixODBC のコンパイル¶
ご使用のオペレーティングシステムのパッケージマネージャーを使用して unixODBC をインストールできない場合は、unixODBC をダウンロードしてコンパイルします。そのためには、以下の手順に従って実施してください。
http://www.unixodbc.org/download.html からソースコードの最新バージョンをダウンロードします。
以下のコマンドを実行して、ソースコードを展開してコンパイルします。
tar -zxf unixODBC*.tar.gz cd unixODBC ./configure.sh make
次のコマンドを実行します。
sudo make install
問題のトラブルシューティング¶
この DSN を使用しようとしたときに、アプリケーションが次のようなエラーを返す場合があります。
[unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)
この場合は、以下の手順に従います。
DSN を作成したホストに接続します。
以下の各ファイルが存在することを確認します。
/usr/local/lib64/libodbc.so /usr/local/lib64/libodbcinst.so
または
/usr/local/lib/libodbc.so /usr/local/lib/libodbcinst.so
これらのファイルの場所は、Linux/Unix ディストリビューションによって異なる可能性があります。
~/.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
に存在する場合は、それに合わせて適宜変更してください。
このユーザーアカウントからいったんログアウトして再度ログインすると、ファイル
.bash_profile
に対する変更が適用されます。