noriyuruの日記: ProFTPD-mod_sql
日記 by
noriyuru
コンテキストはすべてのディレクティブでserver config,<Global>,<VirtualHost>となっている。最低限必要なのはSQLConnectInfo,SQLAuthTypesの二つだけ。テーブルのほうはuserid(番号でなく名前),passwadの二つのコラムがあれば動く。グループ管理の機能もあるが必要無ければ使わなくても良い。
-----------------------------
SQLConnectInfo
Syntax: SQLConnectInfo connection-info [username] [password] [policy]
データベース接続に必要な情報を指示する。
connection-infoはデータベース、接続先ホスト、接続先ポートおよびバックエンドを明示した情報である。usenameとpasswdはそれぞれ接続時のユーザとパスワードである。(データベースに設定されるユーザの事)。共にデフォルトはNULLである。もしpasswdを明示するならばusernameを明示しなければならない。
このディレクティブがコンフィグファイルに書かれていない場合mod_sqlの機能は使用されない。それで問題は無いかも知れないがデータベース機能は使用できない。
proftpdのスタートアップ時にconnection-infoフィールドの中の構文エラーをチェックする機会を待つとする。しかし、構文エラー(例:can't connect to the database)は現れないはずである。それはmod_sqlがホストとの接続を試みるまでは構文エラーが発生しないためである。
データベース接続は接続ポリシーによってオープンとクローズ時の方法を管理する。3つのオプションが用意されている。
PERSESSION:セッションの開始で接続をオープンする。そしてセッションの終わりでクローズする。
PERCALL:データベース呼出しごとにオープン、クローズする。
# (TIMED):いったん接続した後、指示した秒数だけ使用されない時にクローズする。
もしポリシーが明示されず数字、1より小さい数字、文字列PERSEEIONの時はPERSESSIONポリシーが使用される。
文字列PERCALLならばPERCALLポリシーが使用される。
0より大きい数字ならばコネクションが未使用時においても指示された秒数だけ保持される事になる。
指示された秒数だけ未使用が続いた場合はクローズされる。再び使用されるときに接続が行われタイマーはリセットされる。
MySQLとPostgresにおけるバックエンド接続情報は次のようになる:
database@hostname:port
hostnameはデフォルトではバックエンドのホストネームである。(MySQLとPostgressの両方でlocalhost)
portのデフォルトはバックエンドのデフォルトポートである。(MySQLでは3306、Postgresで5432)
MySQL:ホストはホストネームかIPアドレスのどちらかである。もしホストがNULLまたはlocalhostであればローカルホストとの接続が仮定される。もしOSがソケット(Unix)または名前付きパイプ(Windows)をサポートするならば、それらはTCP/IPの代わりにサーバとの接続に使用される。
PostgreSQL:ホストが/(スラッシュ)で始まるのならそれはTCP/IP経由の接続ではなくUnixドメイン経由の接続である。内容はソケットファイルが保存されているディレクトリ名である。デフォルトは/tmpによるUnixドメインソケットでの接続である。
NOTE:もしPERCALLまたはTIMED接続を採用するならばローカルソケットにおけるDefaultRootディレクティブの影響を考慮すること。ユーザがChrootされた場合、ローカルソケットファイルはChrootされたディレクトリの中に存在しないだろう。そのためオープンには失敗する。回避作としてユーザのディレクトリの中にハードリンクを作っておく。PERSESSION接続はchroot()呼び出しより先にデータベース接続を行う事からこの影響をうけない。そして、セッションの間接続が保たれる。ネットワークを経由する接続は影響を受けない。たとえば、localhostではMySQLは動作しない。これはMySQLクライアントのライブラリーはソケット経由の接続を試みるためである。しかし127.0.0.1では動作する。(データベースが接続可能に設定されていれば)
-----------------------------
訳していて分かった事だが、自分はソケット、プロセス通信について知らない。データーベースは使用できるが用語について知らない。Backend-specificとはデータベースのことなのか? うーむ。他にも細かいところが訳せない。セットアップに必要な所は訳せた。Examplesは省略。技術的な事が分かれば訳は必要無いと考えたため。特に説明しているわけでもないし。
-----------------------------
SQLConnectInfo
Syntax: SQLConnectInfo connection-info [username] [password] [policy]
データベース接続に必要な情報を指示する。
connection-infoはデータベース、接続先ホスト、接続先ポートおよびバックエンドを明示した情報である。usenameとpasswdはそれぞれ接続時のユーザとパスワードである。(データベースに設定されるユーザの事)。共にデフォルトはNULLである。もしpasswdを明示するならばusernameを明示しなければならない。
このディレクティブがコンフィグファイルに書かれていない場合mod_sqlの機能は使用されない。それで問題は無いかも知れないがデータベース機能は使用できない。
proftpdのスタートアップ時にconnection-infoフィールドの中の構文エラーをチェックする機会を待つとする。しかし、構文エラー(例:can't connect to the database)は現れないはずである。それはmod_sqlがホストとの接続を試みるまでは構文エラーが発生しないためである。
データベース接続は接続ポリシーによってオープンとクローズ時の方法を管理する。3つのオプションが用意されている。
PERSESSION:セッションの開始で接続をオープンする。そしてセッションの終わりでクローズする。
PERCALL:データベース呼出しごとにオープン、クローズする。
# (TIMED):いったん接続した後、指示した秒数だけ使用されない時にクローズする。
もしポリシーが明示されず数字、1より小さい数字、文字列PERSEEIONの時はPERSESSIONポリシーが使用される。
文字列PERCALLならばPERCALLポリシーが使用される。
0より大きい数字ならばコネクションが未使用時においても指示された秒数だけ保持される事になる。
指示された秒数だけ未使用が続いた場合はクローズされる。再び使用されるときに接続が行われタイマーはリセットされる。
MySQLとPostgresにおけるバックエンド接続情報は次のようになる:
database@hostname:port
hostnameはデフォルトではバックエンドのホストネームである。(MySQLとPostgressの両方でlocalhost)
portのデフォルトはバックエンドのデフォルトポートである。(MySQLでは3306、Postgresで5432)
MySQL:ホストはホストネームかIPアドレスのどちらかである。もしホストがNULLまたはlocalhostであればローカルホストとの接続が仮定される。もしOSがソケット(Unix)または名前付きパイプ(Windows)をサポートするならば、それらはTCP/IPの代わりにサーバとの接続に使用される。
PostgreSQL:ホストが/(スラッシュ)で始まるのならそれはTCP/IP経由の接続ではなくUnixドメイン経由の接続である。内容はソケットファイルが保存されているディレクトリ名である。デフォルトは/tmpによるUnixドメインソケットでの接続である。
NOTE:もしPERCALLまたはTIMED接続を採用するならばローカルソケットにおけるDefaultRootディレクティブの影響を考慮すること。ユーザがChrootされた場合、ローカルソケットファイルはChrootされたディレクトリの中に存在しないだろう。そのためオープンには失敗する。回避作としてユーザのディレクトリの中にハードリンクを作っておく。PERSESSION接続はchroot()呼び出しより先にデータベース接続を行う事からこの影響をうけない。そして、セッションの間接続が保たれる。ネットワークを経由する接続は影響を受けない。たとえば、localhostではMySQLは動作しない。これはMySQLクライアントのライブラリーはソケット経由の接続を試みるためである。しかし127.0.0.1では動作する。(データベースが接続可能に設定されていれば)
-----------------------------
訳していて分かった事だが、自分はソケット、プロセス通信について知らない。データーベースは使用できるが用語について知らない。Backend-specificとはデータベースのことなのか? うーむ。他にも細かいところが訳せない。セットアップに必要な所は訳せた。Examplesは省略。技術的な事が分かれば訳は必要無いと考えたため。特に説明しているわけでもないし。