by Hippo2000(1999/11/3)
DBI::ProxyServerモジュールなのです。
なおこのドキュメントではDBIモジュールを入れると入ってくるProxyServer.htmを日本語化したものです。わかりにくい部分は本物を見てください。(^^;;
原本の著作権は Jochen Wiedmannさんがお持ちです。Jochen Wiedmannさんにはメールで了解をいただきました。
なお内容等が間違っていたら修正します。ご連絡ください
DBI::ProxyServer - DBD::Proxyドライバのためのサーバ
use DBI::ProxyServer;
DBI::ProxyServer::main(@ARGV);
DBI::ProxyサーバはDBIプロキシドライバのためのプロキシを実装するためのモジュールです。DBMSがネットワークによる操作を提供しなくても、ネットワークを越えたデータベースへのアクセスを可能にします。
しかし統合されたネットワーク機能を持ったDBMSを持っていたとしても、プロキシサーバが便利であるかもしれません:ファイアウォールのある環境でもDBIプロキシとして使うことが出来るのです。
DBI::ProxyServerは、DBMSやファイアウォールのあるマシンでデーモンとして走ります。クライアントはDBIドライバ DBD::Proxyを使って、DBD::mysql、DBD::mSQLや他のDBIドライバを使うのとまったく同じ方法でエージェントに接続します。
エージェントはRPC::PlServerアプリケーションとして実装されています。こうしてこのモジュールの全ての機能、特に暗号化と同様の構成ファイルへのアクセスを持ちます。DBI::ProxyServerは問い合わせを制限する機能を追加しています。
クライアントが実行できる問い合わせの集合を定義し、アクセスを制限することが出来ます。(DBIドライバがパラメータ・バインディングをサポートしている必要があります)。構成ファイル をご覧下さい。
DBI::ProxyServer::main() 関数を呼び出すさいに、オプションの配列を指定します。(指定がなければ、@ARGV コマンドライン・オプションの配列が使われます。)このオプションはGetopt::Longモジュールで解析されます。ProxyServerはRPC::PlServerのすべてを、さらにNet::Daemonのオプションとオプション操作、特にコマンド行と構成ファイルの両方からオプションを読みこむ機能を継承しています。RPCをご覧ください。使えるオプションについてはNetもご覧ください。
my $rootdir = '/var/dbiproxy';
my $unixsockdir = '/tmp';
my $unixsockfile = 'mysql.sock';
foreach $dir ($rootdir, "$rootdir$unixsockdir") {
mkdir 0755, $dir;
}
link("$unixsockdir/$unixsockfile",
"$rootdir$unixsockdir/$unixsockfile");
require DBD::mysql;
{
'chroot' => $rootdir,
...
}
chroot()を知らなければ、ログインした後にのみ、あるディレクトリ・ツリーを見ることができるFTPサーバを考えてみてください。--group、--userオプションもご覧ください。
Perl 5.005で動かしていて、スレッド用にコンパイルしてあれば、サーバは接続毎に新しいスレッドを生成します。スレッドはサーバのRun()メソッドを実行し、終了します。このモードがデフォルトです。"--mode=threads"で、このモードにすることもできます。
スレッドが使えなくても、fork()を動かすことができるのであれば、サーバは接続毎に新しいプロセスを生成することで同じように動きます。スレッドがなければ自動的に、あるいは"--mode=fork"オプションを使えば、このモードが使われます。
UIDにはグループ名または数値を渡すことができます。(訳者注:ユーザ名の間違いだろうとは思いますが)
構成ファイルはRPC::PlServer や Net::Daemon のものに、クライアント・リストにいくつかの属性を追加しただけのものです。
構成ファイルはPerlスクリプトです。ファイルの先頭には任意のPerlソースを入れることができます。例えば、最初にドラバをロードしたり(パフォーマンスをよくするのに有効です)、chroot環境を準備したりなど。
大事なことは、最後にname/valueの組み合わせによるオプションのハッシュ・リファレンスを最後に返すということです。指定できるオプションは上記に上げた通りです。
Net::Daemon と RPC::PlServer の全ての機能が適用できます。特に以下のものがあります:
さらにサーバは問い合わせの制限を提供しています。以下のようなクライアント・リストを考えてみてください:
'clients' => [
{ 'mask' => '^admin\.company\.com$',
'accept' => 1,
'users' => [ 'root', 'wwwrun' ],
},
{
'mask' => '^admin\.company\.com$',
'accept' => 1,
'users' => [ 'root', 'wwwrun' ],
'sql' => {
'select' => 'SELECT * FROM foo',
'insert' => 'INSERT INTO foo VALUES (?, ?, ?)'
}
}
そして、rootとwwwrunだけがadmin.company.comから接続し、任意の問い合わせを実行することができます。しかしwwwrunだけは他のホストから接続できますが、
$sth->prepare("select");
や
$sth->prepare("insert");
に制限されます。
これは実際には "SELECT * FROM foo'' や "INSERT INTO foo VALUES (?, ?, ?)'' になります。
(原文のまま)
Copyright (c) 1997 Jochen Wiedmann
Am Eisteich 9
72555 Metzingen
Germany
Email: joe@ispsoft.de
Phone: +49 7123 14881
The DBI::ProxyServer 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.
dbiproxy(1), DBD, DBI(3), RPC, RPC, Net, Net, Sys, Win32, syslog(2)
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。