[an error occurred while processing this directive] [APACHE DOCUMENTATION]

モジュール mod_auth_msql

このモジュールはmod_auth_msql.cファイルに含まれ、デフォルトでコンパイルされています。これはパブリックドメインmSQLデータベースftp://ftp.bond.edu.au/pub/Minerva/msql、通常のtcp/ipソケットのコミュニケーションと同じくらい内部Unixドメインプロトコルにコンタクトできる、早いが限定されたSQLエンジンを使うアクセスコントロールを許可します。これはApache 1.1とそれ以上でのみ有効です。

Full description / Example / Compile time options / RevisionHistory / Person to blame / Sourcecode


Full description of all tokens

Auth_MSQLhost < FQHN | IP Address | localhost >
mSQLデーモンが作動しているマシンのホスト名です。サーバの効果的なuidはアクセスを許可されるべきです。もし与えられていないか、それがマジックネームlocalhostならば、null pointerとしてmSQLライブラリにパスされます。これは(遅い)ソケットのコミュニケーションよりもむしろ/dev/msqlを効果的に使わせます。
Auth_MSQLdatabase < mSQL database name >
以下のテーブルが含まれているデータベース名(クイックチェック:データベース名のスペルを認証するmSQL command relshow [<hostname> dbase]を使用)
Auth_MSQLpwd_table < mSQL table name >
少なくともユーザー名と(暗号化された)パスワードの領域を含んでいます。それぞれのuidはこのテーブルに一度だけ生じ、パフォーマンス理由によりプライマリキーとなるべきです。普通このテーブルは義務的ですが、他の方法が駄目な時に使うことができ、グループ制御でのみmSQLモジュールを使うことができます。Auth_MSQL_Authorative命令以下を参照してください。
Auth_MSQLgrp_table < mSQL table name in the above database >
少なくともユーザー名とグループ名の領域を含みます。多様なグループのユーザーはそれ故、多様なエントリーを持っています。これに関連したパフォーマンスの問題がいくつかあり、もしディレクトリ構造が許していればですが、一つは(一つのテーブルの全てのグループよりもむしろ)それぞれのグループに分割したテーブルを持っていることだと考えられます。一つはグループコントロールを行なっている時このテーブルを特定する必要があるだけです。
Auth_MSQLuid_field < mSQL field name >
Auth_MSQLpwd_tableAuth_MSQLgrp_tableのテーブルに任意にユーザー名を含む領域の名前
Auth_MSQLpwd_field < mSQL field name >
Auth_MSQLpwd_tableのテーブルにあるパスワード領域名
Auth_MSQLgrp_field < mSQL field name >
グループ名の領域名
使われたフィールドだけが特定される必要があります。このモジュールがBACKWARD_VITEKオプションでコンパイルされると、uidと領域名は'user'と'password'に対してデフォルトします。しかしながら、複雑なセキュリティ問題に与えられた特定のこれらの値に対しては通常強く助長されます。
Auth_MSQL_nopasswd < on | off >
もしpasswd領域が空なら、スキップパスワード比較はあらゆるパスワードを許可します。これはmSQLテーブルの空領域がデフォルトのランダムなパスワードによって人が入るのを許可しないことを確実にするデフォルトによって'off'になっています。
Auth_MSQL_Authorative < on | off >
デフォルトは'on'です。'on'にセットすると、他の権限を委譲する方法が駄目になることはありません。それでもしユーザーがmSQL dbaseテーブルになかったり、(正しいグループに入っていなかったり)あるいはパスワードが悪かったりすると、アクセスは拒否されます。この命令が'off'にセットされると、htpasswdファイルのbasic authモジュールやUnix-(g)dbmモジュールのようななんらかの認証モジュールに制御がパスされます。デフォルトはひどい'fall-through'を避けるため'on'になっています。スィッチをoffにするときに行なっていることを確認してください。
Auth_MSQL_EncryptedPasswords < on | off >
デフォルトは'on'になっています。onにセットすると、pwd_fieldの値は*your*のマシンの'crypt()'機能を使って暗号化されていると仮定し、新しく入るパスワードは比較の前に'crypt'されます。この機能が'off'の時、比較は直接plaintextenteredのパスワードで行われます。(http-basic-authはwireを超えるplaintextとしてパスワードを送ります。 :-( )デフォルトは賢明にも'on'ですが、これを変えることは*very-bad-idea*です。しかしながら多様なベンダーや(時々違った暗号化機能をおこす)内部環境では変えざるを得ないでしょう。

Example

mSQLのテーブルの例は以下のコマンドで作られます:
     % msqladmin create www               
% msql www
-> create table user_records (
-> User_id char(32) primary key,
-> Cpasswd char(32),
-> Xgroup char(32)
-> ) \g
query OK
-> \q
%

User_idは要求されたものと同じくらい長くなります。しかし、一般的なウェブブラウザは名前を切り捨てるか、32文字以上の入力をユーザーに止めさせます。その上、プラットフォームの'crypt'機能はさらに制限を課します。uid'sが空白によって仕切られているaccess.confファイルにあるrequire users uid [uid..]命令の使用もまた、可能な限りユーザー名でのスペースの使用を禁止します。また、以下にあるMAX_FIELD_LEN命令にも注意して下さい。

上記を使用するためには、以下の例をaccess.confファイルに挿入します。この例の下にもまた詳細な説明があります。

<directory /web/docs/private>

Auth_MSQLhost localhost
or
Auth_MSQLhost datab.machine.your.org
もしこの命令が省略されたり、localhostにセットすれば、ApacheとmSQLデータベースが同じ(物理的に)マシン上で動いていて、より速い/dev/msqlコミュニケーションチャンネルが使われると仮定されます。そうでなければtcp/ipによってコンタクトするマシンです。より詳しい情報についてはmSQLのドキュメントを参照してください。

Auth_MSQLdatabase www
上記のマシンのデータベース名はグループとユーザー/パスワードのテーブルの両方を含んでいます。現在、これらを二つのデータベースに分割することは不可能です。mSQLのmsql.acl (アクセスコントロールファイル)が本当にこのデータベースにアクセスして読み込むウェブサーバの実際のuidを許可していることを確認してください。 このuidのhttpd.confファイルをチェックしてください。
Auth_MSQLpwd_table user_records
これは組み合わせが特定されているuid/passwordを含むテーブルです。
Auth_MSQLuid_field User_id
Auth_MSQLpwd_field Cpasswd
これらの二つの命令はuser_recordテーブルの領域名を特定します。もしこのモジュールがBACKWARD_VITEK互換性スィッチでコンパイルされていれば、userpasswordのデフォルトはそれらを特定していなければ仮定されます。現在user_id領域はプライマリキーでなければならないか、あるいはそれぞれのユーザだけがテーブルの中にonceを生じることを確実にしなければならない。もしuidが生じれば二回のアクセスはデフォルトによって拒否されます;より詳しい情報についてはONLY_ONCEコンパイラー命令を参照してください。
Auth_MSQLgrp_table user_records
Auth_MSQLgrp_field Xgroup
オプションとしてuser/groupの組み合わせを含むテーブルを特定することもできます。これはusername/passwordの組み合わせを含んでいるテーブルでもまた同じです。しかしもしユーザーが二つかそれ以上のグループに所属していれば、多様なエントリーの異なったテーブルを使用しなければならないことになります。
Auth_MSQL_nopasswd off
Auth_MSQL_Authorative on
Auth_MSQL_EncryptedPasswords on
これら三つのオプション領域(全てデフォルトで適切にセットしてあるので本当はそれらを入力してはいけない)は以下に詳細が記述してあります。もしこれらを他のなんらかの値にセットするなら、上記でセキュリティimplicationsを理解していることを確認し、期待するようにApacheが動くことを証明してください。
AuthName example mSQL realm
AuthType basic
Normal Apache/NCSA tokens for access control

<limit get post head>
order deny,allow
allow from all

require valid-user

or
require user smith jones
require group has_paid
<limit>

Compile Time Options

#define ONLY_ONCE 1
もしuid/passwdの組み合わせを含んでいるmSQLテーブルがプライマリキーとしてuid領域を持っていなければ、可能な限り違ったパスワードでテーブルに一度以上uidが生じることを可能にします。このモジュールがONLY_ONCE命令のセットでコンパイルされると、もしuidが一度以上uid/passwdテーブルに生じればアクセスは拒否されます。もしそれをセットすることをしていないなら、ソフトウェアは返送された最初のペアを取り、それ以上のペアを無視します。これに使われるSQLステートメントは

"select password form pwd_table where user='uid'"

これは予想できない結果をもたらします。パフォーマンスの理由と同じようなこの理由で、uid領域にプライマリキーを作ることを強く忠告されます。自身の責任で使ってください。:-)

#define KEEP_MSQL_CONNECTION_OPEN
通常データベースとの(tcp/ip)接続は開かれ、それぞれのSQLクエリーでは閉じられています。Apacheウェブサーバとデータベースが同じマシン上にあり、/dev/msqlが使われている時、これは深刻なオーバーヘッドの原因にはなりません。しかし、プラットフォームがこれをサポートしていなかったり、(mSQLドキュメント参照)ウェブサーバとデータベースが違ったマシン上にある時は、オーバーヘッドが少なくありません。上記の命令がセットされると、範囲を限定されたサーバは接続を開放したまま、すなわちmsqlClose()に対してコールしません。もしエラーが生じるなら、次のhttpの要求に再度接続を開かせてください。

これはたくさんの非常に深刻な問題を持っています。

手短にいえば、自身の責任でこれを使い、よくコントロールされたモニターされた環境で使ってください。

#define BACKWARD_VITEK
#define VITEK_uid_name "user"
#define VITEK_gid_name "passwd"
Apacheの二番目のmSQL authモジュールもまたVivek Khera <khera@kciLink.com>によって改良されてきました。そして、引き続いてApacheの初期のバージョンで配布されました。ftp://ftp.kcilink.com/pub/mod_auth_msql.c*で手にいれることができます。古い'vitek'バージョンはfield/table名がコンパイルされていました。新しいバージョンv.1.11はより多くのaccess.confコンフィギュレーションのオプションを持っています。しかし、選ばれたこれらはこのモジュールの'ewse'バージョンの行にはありません。また、'vitek'モジュールはグループにコントロールを与えないか、'empty'パスワードコントロールを与えます。

このバージョン(0.9)の行にわずかに追加することは'vitek'モジュールと互換性のある遅れたものにするべきです:

これがトラブルを生じたら、'BACKWARD_VITEK' 定義を外してください。

#define MAX_FIELD_LEN (64)
#define MAX_QUERY_LEN (32+24+MAX_FIELD_LEN*2+3*MSQL_FIELD_NAME_LEN+1*MSQL_TABLE_NAME_LEN)
非常に大きなHUGE_STRING_LENGTHの使用を避けるために、上記の二つのコンパイルタイム命令が提供されています。MAX_FIELD_LENはユーザー、パスワード、グループ領域の文字の最大数を含んでいます。最大クエリー長はそれらの値が基になっています。

以下の二つのクエリーだけを行ないます:

これはクエリー文字列にとって上記の制限になります。ここでは24 escapes以下だと仮定して少しescapingを無視しています。)


Revision History

This version: 23 Nov 1995, 24 Feb 1996, 16 May 1996.
Version 0.0
初期版のリリース
Version 0.1
Apache 1.00に更新
Version 0.2
Added lines which got missing God knows when and which did the valid-user authentification no good at all !
Version 0.3
'Auth_MSQL_nopasswd'オプションを追加
Version 0.4
エラーメッセージmess.の消去
Version 0.6
gid/grp in comment/token/sourceに関する矛盾 上記のように'Auth_MSQLgrp_field'を使っていることを確認してください。
Version 0.7
*hostからhostへの固定。これに関する速やかな認証はRob Stout, へ。
Version 0.8
上記のAuthorative命令の追加
Version 0.9
pallocリターンコードチェックはグループ制御の壊れたerr msgの固定し、その新しいモジュール管理ツールに表示された時に、より重要になるコマンドテーブルメッセージを変更するVivek Khera msqlモジュールのバージョン1.11以降と互換性があるべきです。Auth_MSQL_EncryptedPasswordsのon/off機能が追加されています。上記のエラーにmsqlClose()ステートメントを追加しています。mSQL database (riscy)の常時接続をサポートしています。'と\でエスケイプします。いくつかのMAX_STRING_LENGTH要求を元に戻します。

Contact/person to blame

このモジュールは<Dirk.vanGulik@jrc.it>によってEuropean Wide Service Exchangeのために書かれています。もしなんらかのトラブル、アイスクリーム、バグがあった場合には、連絡してください。このドキュメントはNick Himba, <himba@cs.utwente.nl>の協力によるものです。


Sourcecode

ソースコードはhttp://www.apache.orgに見られます。改良版のスナップショットは通常 http://me-www.jrc.it/~dirkx/mod_auth_msql.cにあります。綴じ込みのバグが報告されている時は常に使っているバージョンを参照して確認してください。

さらに、test/demonstration(コンパイルとインストールがされたmSQLとApacheの両方を持っていると仮定)はftp://ftp.apache.org/apache/dist/contribhttp://me-www.jrc.it/~dirkx/apache-msql-demo.tar.gzとそのREADMEファイルに対して有効です。


このJAPACHE!ニュースグループへ ( japache.mod.auth.msql ) | JAPACHE!ニュースについて | JAPACHE!ホームページへ

このページの情報に関わる、ご質問、お問い合わせは、 japache@infoscience.co.jpまで。


検索文字
The English original manual is here.

Index Home