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=alpha;port=3334
dsn=DBI:ODBC:mydb
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の秘密はあなたの個人的な秘密です。
stderr=1
logfile=/dev/null
しかし、データベース・ハンドルやステートメント・ハンドルでproxy_no_finish属性をTRUE値に設定すると、finish()してもそれは圧縮されます。例えば小さくて速いCGIアプリケーションでは、まさに求めていたものでしょう。
(原文のまま)
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)
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。