FrontPage


設定ファイル(aliases.conf/firebird.conf)のリファレンス

 重要な設定ファイルである、aliases.conf/firebird.confに関する リファレンスです。基本的に、訳文+α(独自)となっていますが、内容に間違いが 無いことを保証することは出来ませんので、疑問がある場合や疑わしい場合は 原文を参照して下さい。
 すべての内容は、Firebird 1.5.1 の情報に基づいています。そのため、 1.0.xとはファイル名やキーワードに差異がありますので、注意して下さい。



aliases.conf

 データベース名のエイリアスの設定を行うファイルです。
 SQL の CONNECT などで指定するデータベース名は、デフォルトの状態では ファイルシステム上でのフルパスを設定しますが、firebird.confにある パラメータのDatabaseAccessを"None"に設定すると、 本ファイルで定義したエイリアス以外でのデータベース名指定を禁止する ことが出来ます。そのため、クラッカーが何らかの方法でデータベース管理者 のパスワードを取得した場合でも、攻撃を受ける対象をある程度限定的な 物に押さえ込むことが可能となり、システム全体の安全性が高まります。
 同パラメータによるディレクトリ制限指定によっても同様のことが実現可能 ですが、エイリアス指定のみ有効とした方がより安全度が高いと言えるでしょう。

 具体的な設定内容は、データベースファイルへのフルパスと定義したい エイリアスの定義を結び付けます。

dummy = c:\data\dummy.fdb

 パスのデリミタなどは、OSに合わせて変更してください。
 また、先頭が"#"で始まる行はコメントとなります。




firebird.conf

 Firebird データベースエンジンの細かな動作をカスタマイズするための設定 ファイルです。キャッシュサイズなどの性能面をチューニングするパラメータも あれば、アクセスディレクトリ制限などの重要なセキュリティに関するパラメータ 設定もあります。

 特にディレクトリ制限でのデフォルト設定は、インストール直後の取り扱いの 容易さや今までの慣例を重視してか、ファイルパスをダイレクトに設定し、 制限無くアクセス可能となっています。しかし、クラッカーの攻撃による影響を 最小限にし、セキュリティを固めるためには設定を行った方が良いでしょう。
 ハードウェアのシステム構成によっては、リモートバインド設定でアクセスを 許可するネットワークを制限することも可能です。

 また、UNIX系のOSではNFSでのファイルの排他制御に確実性がまだ確保されて いないため、デフォルトの設定ではNFSでマウントされたデバイス上にある データベースを取り扱えないようになっています。特別な状況でこれを解除する ための設定がありますので、内容と必要性を十分に吟味した上で使用しましょう。

 Windows+SMPシステムの場合は、SMP向けのパラメータが有りますので忘れずに 設定をチェックしましょう。設定を行わないと、適切なパフォーマンスが実現 出来ないかもしれません。

 本ファイルは、IB/FB1.0.xではibconfigとなっていたものに相当するものです。 ただし、設定する内容自体は似ておりますがキーワード等は変更されているよう です。

 行の先頭が"#"から始まる行はコメントです。
 ほとんどの設定項目がインストール直後のデフォルト状態ではコメントアウト されています。必要に応じて、外して設定してください。

全プラットフォームに共通な項目

ルートディレクトリの指定

 文字列指定です。

RootDirectory =

 Firebirdがインストールされたルートのディレクトリを強制的に 指定します。

データベースパス・ディレクトリの指定

 文字列指定(特殊フォーマット)です。

DatabaseAccess = Full

 データベース名の指定方法を設定します。None,Full,Restrictの3種類が設定 できます。デフォルトは Full となっているため、あなたのマシンを危険に晒す 可能性があります。
 セキュリティを強化するために、何らかの制限を行うことが強く推奨されています。

  • Restrict
     データベースを格納出来るディレクトリを制限します。セミコロンで区切った ツリーリストを指定します。相対パス指定の場合の元となるパスは、上述の ルートディレクトリで指定したパスとなります。  例えば、Windowsの場合は次のように、
    Restrict C:\DataBase;D:\Mirror
     UNIX/Linux系の場合は次のように指定します。
    Restrict /db;/mnt/mirrordb'
  • Full
     デフォルトの指定です。全てのパスを指定します。アクセス権限の問題がない 限り、全てのファイル・ディレクトリにアクセスできます。
  • None
     ファイルを指定することは出来なくなります。"aliases.conf"に設定された エイリアスでの指定のみが有効となります。

外部ファイルパス・ディレクトリの指定

 文字列指定(特殊フォーマット)です。

ExternalFileAccess = None

 外部ファイルの指定方法を設定します。None,Full,Restrictの3種類が設定 できます。デフォルトは None となっています。外部ファイルを使用する場合には、 セキュリティを強化するために、何らかの制限を行うことが強く推奨されています。

  • Restrict
     ディレクトリを制限します。セミコロンで区切ったツリーリストを指定します。 相対パス指定の場合の元となるパスは、上述のルートディレクトリ で指定したパスとなります。  例えば、Windowsの場合は次のように、
    Restrict C:\ExternalTables
     UNIX/Linux系の場合は次のように指定します。
    Restrict /db/extern;/mnt/extern
  • Full
     全てのパスを指定します。アクセス権限の問題がない限り、全てのファイル・ ディレクトリにアクセスできます。
  • None
     デフォルトの指定です。外部ファイルは使用できません。

外部関数(UDF) パス・ディレクトリの指定方法

 文字列指定(特殊フォーマット)です。

UdfAccess = Restrict UDF

 UDFのパスを設定します。None,Full,Restrictの3種類が設定できます。 デフォルトは、"Restrict UDF"となっています。つまり、 ルートディレクトリの設定が変更されていなければ、 インストールしたディレクトリ直下のUDFディレクトリのみを指定しています。
セキュリティを強化するために、何らかの制限を行うことが強く推奨されています。 特に外部ファイルパス・ディレクトリ指定(ExternalFileAccess)と同じディレクトリをアクセス可能とすることは非常に危険です。 外部から悪意のあるプログラムを受け入れる温床になりかねません。

  • Restrict
     デフォルトの指定です。ディレクトリを制限します。セミコロンで区切った ツリーリストを指定します。相対パス指定の場合の元となるパスは、上述の ルートディレクトリで指定したパスとなります。  例えば、Windowsの場合は次のように、
    Restrict C:\ExternalFunctions
     UNIX/Linux系の場合は次のように指定します。
    Restrict /db/extern;/mnt/extern

テンポラリディレクトリの指定

 文字列指定(特殊フォーマット)です。

TempDirectories =

 テンポラリディレクトリの設定を行います。複数指定する場合は、セミコロンで 区切ったリストで指定します。相対パス指定の場合の元となるパスは、 ルートディレクトリで指定したパスとなります。

 デフォルト値(未設定)は、環境変数での指定となります。参照される優先順位は、 FIREBIRD_TMP,TEMP,TMPの順となっています。

 ここでディレクトリの指定を行う場合は、各ディレクトリごとに使用サイズの 制限を行うことが出来ます。サイズを指定する場合は、ディレクトリ名に続いて スペースを置き、その後に数値で指定します。サイズを省略した場合、その ディレクトリで使用可能な領域をすべて使用可能とします。
 例えば、次のように指定を行います。

例1:

TempDirectories = c:\temp

例2:

TempDirectories = c:\temp;d:\temp

例3:

TempDirectories = c:\temp 100000000;d:\temp 500000000;e:\temp

データベースキャッシュページ数の指定

 整数値指定です。

DefaultDbCachePages = 2048

 各データベース毎に確保するキャッシュのページ数です。数値を増やすと、 データベースエンジンの確保するメモリ量が全てのデータベースで増加します。
 デフォルト値は、スーパーサーバの場合は 2048、クラッシックサーバの場合は 1クライアント接続毎に 75 となっています。

メモリ内ソートモジュールの指定

 整数値指定です。

SortMemBlockSize = 1048576
SortMemUpperLimit = 67108864

 各ソートブロックに割り当てられるメモリ量です。2つめの指定は確保される 最大量の設定です。
※クラッシックサーバの場合
 最大値のデフォルトは8MBです。この値を増やすと、メモリが1クライアント接続 毎に確保されますので、メモリ使用量が膨大な値になることがあります。

旧バージョンとの互換性確保の指定

 論理値指定です。

OldParameterOrdering = 0

 デフォルトは0です。

論理型の評価方法の指定

 論理値指定です。

CompleteBooleanEvaluation = 0

 SQLでの OR,AND 演算子で、論理式としては評価する必要がない評価を省略せずに 行うかを指定します。デフォルトは0(ショートカット)で、可能な限り早く評価を終了 します。C言語での&&や||と同じようなものです。
 すべての演算が完全に行われることが前提になっているシステムの場合には、 設定を変更する必要があるかもしれません。

デットロックタイムアウトの指定

 整数値指定です。

DeadlockTimeout = 10

 指定した秒数の間コンフリクトな状態が続いた場合、ロックマネージャが強制的に ロック状態をパージし、デッドロックのスキャンサイクルに入ります。 環境による要因で正常な処理に異常な時間がかかる場合、変更する必要があるかも しれません。 ただし、あまり低い数値を設定すると、システムに著しい性能低下を及ぼす可能性が あります。

ディスクへのフラッシュに関する指定

 整数値指定です。
 2つありますが、共に"ForcedWrites=Off"の場合にのみ有効です。

MaxUnflushedWrites = 100

 次のトランザクションがコミットされるまでの間、ディスクにフラッシュを行う データを蓄えるバッファのサイズをページ数で指定します。Win32以外の環境では まだ実装されていません。デフォルトは-1(禁止)となっています。

MaxUnflushedWriteTime = 5

 フラッシュが抑制される時間を秒数で指定します。Win32以外の環境では まだ実装されていません。デフォルトは-1(禁止)となっています。

バグチェックアボートの指定

 論理値指定です。

BugcheckAbort = 0

 内部エラー発生時に、abort() を呼び出すように設定します。これにより、 デバッガの起動や、オフラインで解析するためのコアダンプ出力というような 処理が行われます。
 オフ(デフォルト)の場合、データベースエンジンは可能な限り処理を継続 させようとします。

 このオプションをセットすると、POSIX用(含Linux)スーパーサーバの場合、 UDFの中で SIGSEGV を発生させるようなエラーがあると、データベースエンジン のコアダンプが吐き出されますので注意して下さい。

クライアント接続設定(基本設定)

接続タイムアウト

 整数値指定です。

ConnectionTimeout = 180

 接続失敗となる時間を秒で指定します。


ダミーパケット送出間隔

 整数値指定です。

DummyPacketInterval = 0

 長時間クライアントからの通信がない場合、サーバよりダミーのパケット を送出するまでの時間です。秒単位で指定します。
 このオプションは使用しないで下さい!
 クライアントがWindowsの場合、Windowsをクラッシュさせる場合があります。 (参照:http://support.microsoft.com/default.aspx?kbid=296265)
 また、他のOSでも、不活性な接続を持つクライアントの接続を維持できない かもしれません。

 通常、FirebirdはsocketのSO_KEEPALIVEオプションを設定して接続を維持 します。一般的なデフォルトである2時間の設定が気に入らない場合は、OSの 設定を変更してください。
 UNIX系のOSの場合は、"/proc/sys/net/ipv4/tcp_keepalive_*"を変更して 下さい。
 Windowsの場合は、こちらを参照して下さい。 http://support.microsoft.com/default.aspx?kbid=140325

TCPプロトコルセッティング

 TCPでクライアントが接続する場合の設定です。

サービス名・ポート

 文字列又および整数値です。

RemoteServiceName = gds_db
RemoteServicePort = 3050

 サービス名及びポート番号を設定します。サービス名のほうが優先です。

イベント受信ポート

 整数値です。

RemoteAuxPort = 0

 サーバからのイベントメッセージを受信するポート番号を指定します。 0を設定すると、ランダムなポート番号が使用されます。

送受信バッファサイズ

 整数値です。

TcpRemoteBufferSize = 8192

 TCP/IPでの送受信に使用するサーバ・クライアント双方のバッファサイズを 指定します。この値が大きいと、サーバはより多くのデータを一度に転送でき ます。指定可能な範囲は1448〜32768です。

TCP_NODELAYオプション

 論理値指定です。

TcpNoNagle = 0

 socket の TCP_NODELAYオプションを使用するか設定します。
※ 現在、スーパーサーバでは有効になっています。クラッシックサーバでは 外部ラッパープログラムが必要です。

リモートバインドアドレス

 文字列指定です。

RemoteBindAddress =

 これを設定することにより、IPアドレスを指定したネットワークカード以外を経由 した接続を拒否することが出来ます。デフォルトは非設定なので、すべての ネットワークからの接続を受け付けます。
 これにより、接続デバイスが複数ある環境では指定したネットワーク以外からの アクセスを拒否できますので、外部ネットワークと内部ネットワークが別れた環境 などで、外部ネットワークからのデータベースへのアクセスをルーターなどを使用 しなくても遮断することができます。

ロッキング及び共有メモリの設定

ロックマネージャ割り当てメモリサイズ

 整数値指定です。

LockMemSize = 262144

 ロックマネージャに割り当てる共有メモリのサイズです。
 クラッシックサーバの場合は、この数値は初期値で、必要に応じ動的にかつ確保可能 な量まで自動的に拡張されます。
 スーパーサーバの場合は、初期値でありまた最終的な値でもあります。
 デフォルトは、LinuxやSolarisの場合は 96K、Windows では 256K です。

セマフォ数

 整数値指定です。

LockSemCount = 32

 プロセス間通信で使用されるセマフォの数です。非マルチスレッドな環境では、 利用可能なセマフォの数を表します。

ロックオブジェクトの設定

 整数値/論理値指定です。

LockGrantOrder = 1

 ロック要求があったときの、ロックオブジェクトの制御方法を指定します。
 1は早い者勝ちとなります。0は、InterBase3.3の動作をエミュレートしたもので、 リクエストの強いものが有効となります。

ロックテーブルアクセスのリトライ数

 整数値指定です。

LockAcquireSpins = 0

 クラッシックサーバでは、ロックテーブルのアクセスは常に一つのクライアント プロセスから行われ、排他制御はミューテックスにより実現されています。
 ミューテックスは条件付、または無条件に要求することが出来ますが、この数値が 指定されると条件付(待機失敗つき)で要求が行われるようになり、設定値は失敗時の リトライ回数となります。 ここに 0 を設定すると、無条件待ち合わせになります。
 SMPシステム上での指定が適切です。

ロックハッシュスロット数

 整数値指定です。

LockHashSlots = 101

 ロックハッシュリストの調整を行います。多くのハッシュスロットを使う設定に より、より短いハッシュチェーンとなるかもしれません。(=ロック処理が高速に なる可能性がある)
 素数値を設定することが要求されています。

イベントマネージャ割当てメモリサイズ

 整数値指定です。

EventMemSize = 65536

 イベントマネージャに割り当てる共有メモリのサイズです。

スーパーサーバで有効な設定

CPUマスク設定

 整数値指定です。

CpuAffinityMask = 1

 Windows上でのみ有効です。SMPシステムにおいて、サーバが使用するCPUを設定 します。指定は、プロセッサごとに割当てられたビットで行います。
 例えば、1番目のCPUのみ使用するなら"1"を設定します。 1番目と2番目ならば"3"を、2番目と3番目ならば"6"を設定します。
 デフォルトは1となっていますので、SMPシステムでもCPUは1つしか使用されません。

スレッドスケージュリング設定

 整数値指定です。

PrioritySwitchDelay = 100

 Windows上でのみ有効です。プライオリティ変更までの待ち時間をmsec単位で設定 します。不活発なスレッドは"低く"、活発なスレッドは"高く"なります。
※デフォルトの数値は、P3/P4プロセッサの場合です。より性能の低いマシンの場合は 数値を増やします。

スレッドリストコレクションの設定

 整数値指定です。

DeadThreadsCollection = 50

 スレッドの起動・終了前のスケジューラの起動周期を指定します。強制的に 破棄/閉鎖されたスレッド(これによりセマフォ及びブロッキング呼び出しに 関して重要なオーバーヘッドが発生します)がある場合、スレッドスケジューラ はスレッドプールをメンテナンスする必要があります。
 スレッドが仕事を完全に終了した場合、それはアイドル状態とマークされます。 アイドル状態となったスレッドは、設定回数のスケジューラループを実行した後に 破棄/閉鎖されます。

 非常に多くの接続(数百以上)を行うサーバの場合は、より大きい値を設定する べきです。

増加量の指定

 整数値指定です。

PriorityBoost = 5

 プライオリティを高めるときの増加値を指定します。

クラッシックサーバで有効な設定

 現状ではありません。

Windows環境専用の設定

ガーディアンオプション

 整数値/論理値指定です。

GuardianOption = 1

 ガーディアンがクラッシュを検知したときに、どのように再起動を行うか指定 します。
 0の場合は、起動のみを行います。
 1の場合は、常に強制停止後に再起動の処理を行います。

サーバプロセルのプライオリティ

 整数値指定です。

ProcessPriorityLevel = 0

 サーバプロセスの優先度を設定します。
 0の場合は、ノーマルプライオリティです。  正の値の場合は、プライオリティが高くなります。 (コマンドラインの-Bオプションと同じです)  負の値の場合は、プライオリティが低くなります。

ローカル接続の設定

 整数値指定です。

IpcMapSize= 4096

 ローカル接続時に、1クライアントで使用するメモリマップドファイルのサイズを バイト数で指定します。

共有メモリ名

 文字列指定です。

IpcName = FirebirdIPI

 ローカル接続でのデータ転送に使用する、共有メモリの名前です。デフォルトの 名前がIB/FB1.0から変更されています。互換を取りたい場合は、"InterBaseIPI"を 指定してください。

パイプ名

 文字列指定です。

RemotePipeName = interbas

 データ転送にNetBEUIプロトコルを使うときのパイプの名前です。TCP/IPの場合の ポート番号に相当します。これのデフォルト値は、IB/FB1.0と互換性を保っています。

プロセス間通信用ウィンドウ作成の設定

 論理値指定です。

CreateInternalWindow = 1

 プロセス間通信のために、表示されないウィンドウを作成します。ローカル プロトコルを使用しない場合は、これを切ってください。Win32上でいくつかの インスタンスを動作させることが出来ます。

UNIX/Linux環境専用の設定

シグナルの設定

 整数値指定です。

LockSignal = 16

 プロセス間通信で使用するシグナルを設定します。

NFS上にマウントされたデータベースの使用許可設定

 論理値指定です。

RemoteFileOpenAbility = 0

 NFS上にマウントされたボリュームに存在するファイルをデータベースから 開くことを保護している機能を外します。

※警告※警告※警告※警告※警告※警告※警告※

 このオプションを有効にすると、Firebirdの重要な保護機能を停止させ、回復不可能 なデータベースの破壊を引き起こすことが出来ます。危険性が理解できない人や、 データベース内容の重大な損失を許容する覚悟が無いならば、このオプションは 決して使用しないで下さい。
 このオプションが0から1に変更されなければ、データベースがローカルな コンピュータに物理的に接続されたドライブに格納された場合のみ、Firebirdは データベースを開くことが出来ます。
 NFS上にマウントされたドライブにあるデータベースへの接続要請は、そのディスク を「所有する」コンピュータ上で走るFirebirdサーバに転送されます。
 この制限により、2つ以上の異なるFirebirdサーバが協調を取らずに、同じ データベースを開くトラブルを防ぎます。複数のFirebirdサーバによる非協調の データベースアクセスは、データベースに非常に悪いダメージを与えるでしょう。
 ローカルのシステムにおいては、システムレベルのファイルロック機能により データベースへの非協調なアクセスを防ぎます。NFSは、NFS上で信頼の置ける排他制御 の方法を提供していません。そのため、別のFirebirdサーバが協調を行わずに接続し、 データベースを混乱させることを防げません。
 しかし、いくつかの状況によってはこの制限が不都合になる場合があります。
 複数のコンピュータがNFS経由で決してデータベースにアクセスを行わないことが保証されている 特別な場合にのみ、NFS上にマウントされたディスクを使用可能と設定できるように、 このオプションは用意されています。
 システムに不明瞭な部分がある場合、本オプションは使用しないで下さい。

※警告※警告※警告※警告※警告※警告※警告※