Firebird Docset → Firebird Database Docs → Firebird 1.5 クイック・スタート → セキュリティ・ガイドライン |
Firebird 1.5は新しいセキュリティに関する既定をいくつか持っています。これらを 探索してみて下さい。多くの設定可能な機能のデフォルト値は古いままで、「セキュアで無い 」振る舞いをしますが、これは既存のアプリケーションの動作を保証するためです、しかし 可能な限り保護レベルを向上させようとすれば、システムのセキュリティをさらに高めることが 出来るようになっています。
新規又は変更されたセキュリティ機能は以下の通りです:
Posixシステムでは、Firebirdはデフォルトでfirebird として実行されるようになりました。(以前は rootでした)。
Windowsサーバープラットフォームでは、Firebirdサービスを指定されたユーザーアカウント (例:Firebird)で実行することも可能です。サービス を実行する既定のユーザーはLocalSystemですが、 インターネット接続環境下ではシステムが危険にさらされる可能性があります。 docにあるREADME.instsvcを読んで、 この設定について学んで下さい。
Database Aliases は、クライアントから物理的なデータベース の位置を隠蔽します。エイリアスを利用することで、クライアントは例えば次のようにして データベースに接続します 「frodo:zappa」、つまり frodo:/var/firebird/music/underground/mothers_of_invention.fdbという物理配置 を公開せずにすみます。エイリアスを利用することで、また、データベースの配置を変更しても、 クライアントの接続文字列を変更しなくても済むようになります。
DatabaseAccess パラメータによって、 Restrictの場合、制限されたアクセスを設定することが可能です。この場合、 明示的に記述されたファイルシステム上の位置に限定することが出来ます。また、 Noneを設定すると、エイリアスで指定されたデータベースのみアクセス可能 となります。既定値はFullとなっていて、無制限のアクセスを認めています。 (訳注:原文ではAllだが、これはFullのはずです)
ExternalFileAccess パラメータは、外部テーブルへの アクセスを制御しています
UdfAccess パラメータは、ユーザー定義関数の配置場所 についての制御をしています。
データベース・エイリアスはaliases.confで指定されています。 また、設定パラメータはfirebird.confで指定されています。インストールした Firebirdのリリースノートをよく読んで、適切な使用方法を理解するようにして下さい(また、幾ばくか 有用なアドバイスが記述されているはずです)。
Firebirdには、データベースをバックアップ・リストアするためのツールが付属しています。 それはgbakという名前で、Firebirdのインストール先ディレクトリの binサブディレクトリに配置されています。Firebirdの データベースはユーザーが接続し通常の動作を行っている最中でもバックアップすることが可能です。 バックアップはバックアップ開始時点でのデータベースの状態のスナップショットとして作成されます。
定期的なバックアップと時々リストアを行うために、gbakを使用 することは、データベース管理業務として定期的に行うべきです。
データベースが動作中に、外部のプロプライエタリなユーティリティやファイルコピーツール 類(WinZip, tar, copy , xcopy, 等々)を使用しないで下さい。バックアップが 正確に行われないばかりでなく、これらのツールの使用によって引き起こされるディスクレベルでの 排他処理が動作中のデータベースを壊してしまう可能性があります。
リストア中のデータベースの振る舞いについて、次のセクションの警告から学んで下さい
以下のリストに挙げたのはやってはいけないことです。こういった ことを行うとFirebirdのデータベースは壊れてしまう可能性があります。
Firebirdは自身のオブジェクトとユーザーが作成した全てのオブジェクト のメタデータをデータベース中に格納して管理しています。もっとはっきり言えば、 それらのオブジェクトはデータベース自身の関連テーブルに正しく格納されています。 システムテーブルとそれらのカラムやその他の幾つかのシステムオブジェクトの識別子は RDB$で開始されています。
これらは通常のデータベースオブジェクトであるため、ユーザー定義のオブジェクト と同様にクエリーをかけたり操作したりすることが出来ます。しかしながら、これらの操作 をすべきではありません。Firebirdのデータベースエンジンはメタデータオブジェクトを 定義し操作するために、高いレベルでSQL(DDL)のサブセットを実装しています。それらは、 CREATEやALTER、またDROP 文として実行することが可能です。
システムテーブルの直接的な操作をSQLでやることはもちろん、メタデータを変更したり 削除したりする時に、DDLを使うことはあまり強くお勧め出来ません。SQLの技術とFirebirdエンジン に関する知識が十分なレベルに到達するまで、その「衝動」を先延ばしした方がよいでしょう。 大破したデータベースはちょっとした注意や簡単な修理で何とかなるものではないからです。
Firebirdはデフォルトでforced writes(同期書込モード)をONにしてインストールされています。 データの変更や新規の挿入はディスクへ即座に書き込まれています。
データベースを非同期書込モードに変更することは可能ですが、それによってデータの変更や 新規のデータはメモリキャッシュ中に保持され、オペレーティングシステムのI/Oサブシステムが定期 的にその内容をディスクへ書き込むことになります。こうした変更は、forced writes off (又はdisabled)の設定をすることで可能です。この設定は 大規模なバッチオペレーション等でパフォーマンスの向上を図るためになされることがあります。
しかし重大な警告をしなくてはなりません。Windowsサーバー上では、forced writesを disableに絶対にしてはいけません。Windowsサーバーでは、Firebirdサービス をシャットダウンするまで書込キャッシュがフラッシュされなかったという事が報告されています。 電源異常による中断は別として、Windowsサーバーの行いはかなり酷いものです。もし、OSがハングして I/Oシステムにまでそれが及んだ場合、ユーザーの行った操作はリブートプロセスによって全て失われて しまいます。
Windows 9x / ME は遅延書込をサポートしていません。
gbakのリストアのオプションの一つに(gbak -r[eplace]) があり、gbakが既存のデータベースを上書きすることを認めることが出来ます。この時、ユーザーがデータベースに ログインしていても警告すること無しにリストアが実行されてしまいます。結果として、データベースの破壊が たいていの場合は確実に起きてしまします。
管理ツールや管理用のプロシージャをデザインする際には、どのユーザー(SYSDBAも 含みます)であっても、いずれかのユーザーがログインしているデータベースに対してリストアを行わないよう に注意して下さい。
gbakの使い方については、Using Firebirdの Chapter21 Database Backup and Restoreを参照して下さい。
ユーザーに対して排他的アクセスを行う方法については、Using Firebirdの Chapter14 Getting exclusive access to a databaseを参照して下さい。
実際上どうすればよいのかということでは、スペアのディスクスペースにgbak -c[reate] オプションを使用してリストアを行い、isql等のツールを使用して十分にテストを 行うことを推奨します。リストアされたデータベースが問題なければ、サーバーをシャットダウンして、古いデータベース のコピーをファイルシステム上で行い、リストアしたデータベースで既存のデータベースを上書きして下さい。
Firebird Docset → Firebird Database Docs → Firebird 1.5 クイック・スタート → セキュリティ・ガイドライン |