DBD::Proxyモジュール(日本語チョー訳)

by Hippo2000(1999/11/3)

DBD::Proxyモジュールなのです。

なおこのドキュメントではDBIモジュールを入れると入ってくるProxyServer.htmを日本語化したものです。わかりにくい部分は本物を見てください。(^^;;

DBI::ProxyServerも合わせてご覧下さい。

原本の著作権は Jochen Wiedmannさんがお持ちです。Jochen Wiedmannさんにはメールで了解をいただきました。

なお内容等が間違っていたら修正します。ご連絡ください


目次


名前

DBD::Proxy - DBIのためのプロキシ・ドライバ


概要

  use DBI;
  $dbh = DBI->connect("dbi:Proxy:hostname=$host;port=$port;dsn=$db",
                      $user, $passwd);
  # 詳細についてはDBIモジュールのドキュメントをご覧ください

説明

DBD::Proxy はリモートにあるDBIドライバを使ってデータベースに接続するためのPerlモジュールです。

もちろん既にリモート・データベースへの接続をサポートしているDBIドライバには必要ありません。しかしネットワーク接続を提供していないエンジンもあります。

ドライバが問い合わせに基づいた制約を提供することにって、ファイアウォールを通じてのデータベースアクセスを提供する機能があります。例えばCGIアプリケーションで使われる問い合わせ正確に制限することができます。

CGIについて言えば、connect_cachedメソッドで代理することによって、CGIスクリプトでの他の機能(または)データベースへの接続(connect)/切断(disconnect)によるオーバーヘッドを減らすことができます。プロキシ・サーバはデータベース接続オープンをキャッシュに保持します。CGIスクリプトはデータベースへの接続/切断をDBD::Proxyの接続/切断のオーバヘッドを交換します。これは通常より少ないです。connect_chashedメソッドはまだ新しく、いまだに実験的なものであることに注意してください。


データベースへの接続

リモートのデータベースに接続する前に、リモードマシンでプロキシサーバが稼動していることを確認してください。デフォルトのポートはありません。そのためシステム管理者にポート番号を聞かなければなりません。詳細についてはDBI::ProxyServer(3)をご覧ください。

プロキシー・サーバが"alpha"というマシンのポート3334で動いていて、"mydb"というODBCデータベースにユーザ"joe"、パスワード"hello"で接続したいとします。DBD::ODBCを直接使うときには以下のようにします:

  $dbh = DBI->connect("DBI:ODBC:mydb", "joe", "hello");

これをDBD::Proxyを使うと、以下のようになります:

  $dsn = "DBI:Proxy:hostname=alpha;port=3334;dsn=DBI:ODBC:mydb";
  $dbh = DBI->connect($dsn, "joe", "hello");

見ての通り、基本的には同じです。DBD::Proxyモジュールは"alpha"上のプロキシーサーバへの接続を作り、それが代りにODBCデータベースに接続します。

あなたのコードを変更することなく、自動的にDBD::Proxyを使う方法のためのconnectメソッドについてはDBI(3) ドキュメントをご覧下さい。

DBD::ProxyのDSN 文字列は以下のような形式になります:

  $dsn = "DBI:Proxy:key1=val1; ... ;keyN=valN;dsn=valDSN";

言いかえれば、キー/値の組み合わせの集まりです。以下のキーが指定できます:

hostname
 
port
プロキシ・サーバのホスト名とポートです。これらのキーは必須で、デフォルト値はありません。例えば以下のようにします:
    hostname=alpha;port=3334
dsn
この属性の値はプロキシーサーバーによってdsn名として使われます。そのため、これはDBI:ドライバ:...という形式、特にコロンがはいっていなければなりません。dsn の値にはセミコロンが入るかもしれません。そのためコノキーは必ず最後で、その値はdsnの完全にdsnの残りの部分でなければなりません。例えば以下のようにします:
    dsn=DBI:ODBC:mydb
cipher
 
key
 
usercipher
 
userkey
これらのフィールドを使って、暗号化を可能にすることが出来ます。以下に設定すると:
    cipher=$class;key=$key

(セミコロンに注意) DBD::Proxyは以下のことを実行することによって暗号オブジェクト(cipher)を生成します:

    $cipherRef = $class->new(pack("H*", $key));

そしてクライアントが生成されたときに、このオブジェクトをRPC::PlClientモジュールに渡します。RPC::PlClient(3)をご覧下さい。例えば以下のようにします:

    cipher=IDEA;key=97cd2375efa329aceef2098babdc9721

usercipher/userkey 属性は、2フェーズ暗号化を可能にします。cipher/key encryption 暗号化はログインと認証のフェーズで使われます。一度クライアントが認証されたら、usercipher/userkey暗号化に変更します。こうしてcipher/keyの組み合わせはホストをベースとした。秘密で、通常usercipher/userkey よりも安全度は高くなく、だれでも読むことが出来ます。usercipher/userkeyの秘密はあなたの個人的な秘密です。

 
もちろん暗号化は適切に設定されたサーバーを必要とします。 <DBD::ProxyServer(3)/構成ファイル(CONFIGURATION FILE)>をご覧下さい。
debug
デバッグモードをオンにします。
stderr
この属性はRPC::PlClientオブジェクトの対応する属性を設定します。こうすることでログはsyslog()を使わず、標準エラー出力にリダイレクトされます。Windowsでは、これがデフォルトになっています。
    stderr=1
logfile
stderr属性に似ています、しかし出力は指定されたファイルにリダイレクトされます。
    logfile=/dev/null
RowCacheSize
DBD::Proxy ドライバはこの属性をサポートします。(それはDBI 1.02での、DBIの標準です)。1度に複数行を取り出すことによって、ネットワークでの往復を減らすために使われます。現在のデフォルト値は20ですが、変更になるかもしれません。
 
proxy_no_finish
この属性はネットワーク・トラフィックを減らすために使うことが出来ます:アプリケーションが$sth->finish()を呼び出すと、プロキシはサーバーにリモートのステートメント・ハンドルがfinishしたことを伝えます。もちろんこれによってかなり遅くなりますが、永続する接続でのメモリ消費を減らすためにはとてもよいことなのです。

しかし、データベース・ハンドルやステートメント・ハンドルでproxy_no_finish属性をTRUE値に設定すると、finish()してもそれは圧縮されます。例えば小さくて速いCGIアプリケーションでは、まさに求めていたものでしょう。

 
proxy_quote
この属性はネットワーク・トラフィックを減らすために使われます。デフォルトでは$dbh->qute()の呼び出しがリモート・ドライバに渡されます。もちろん、これによりかなり遅くなりますが、これは一番安全なデフォルトの行為です。しかし、proxy_quote属性を値'local'に設定して、quoteの呼び出しが1つのパラメータを持っていれば、ローカルでデフォルトのDBI quoteメソッドが使われます(これはより速いのですが、間違っているかもしれません)

作者および著作権

(原文のまま)

This module is Copyright (c) 1997, 1998

    Jochen Wiedmann
    Am Eisteich 9
    72555 Metzingen
    Germany
    Email: joe@ispsoft.de
    Phone: +49 7123 14887

The DBD::Proxy module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. In particular permission is granted to Tim Bunce for distributing this as a part of the DBI.


参考資料

DBI(3), RPC::PlClient(3), Storable(3)


ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。