SQLXML のセキュリティに関する主な注意点
次に、データ アクセスに SQLXML を使用するときのセキュリティ ガイドラインを示します。
- SQLXMLOLEDB プロバイダでは、StreamFlags プロパティへのアクセスが提供されます。このプロパティでは、特定の各インスタンスに対して有効または無効にする SQLXML 機能を示すフラグを設定できます。このプロパティを使用して、必要なコンポーネントだけが有効になるよう、SQLXML の使用をカスタマイズすることをお勧めします。詳細については、「SQLXMLOLEDB プロバイダ (SQLXML 4.0)」を参照してください。
- SQLXML エラーが発生した場合、返されるメッセージには、テーブル名、列名、種類の情報など、データベース スキーマに関する情報を含めることができます。これらのエラーを扱うときには、SQL Server のインストールに関する情報が関係のないユーザーに伝わらないよう注意する必要があります。
- SQLXML では、SQL Server にクエリを実行したり更新を送信するにあたって、交換できるデータ量に制限は設定されません。また、処理前に SQLXML ペイロード内のデータのサイズに関してチェックは行われません。SQLXML を使用してアプリケーションを開発する場合は、自身の責任で、システムにデータを処理する十分なメモリがあることを確認してください。たとえば、サーバーに対してデータのクエリを実行するときには、クライアント側に、データを受信するだけの十分なメモリの空きがあることを確認する必要があります。同様に、データをサーバーに読み込むときには、サーバー側に、データ処理に使用できるメモリと、データ保存に使用できるディスク保存領域が十分にあることを確認する必要があります。
- SQLXML では、動的に Transact-SQL クエリと更新コマンドが生成され、実行のため SQL Server に送信されます。これは、SQLXML がサーバーにクエリを実行して更新を適用する唯一の方法です。結果は、(XML の) ストリームまたは行セットとして受信されます。
- SQLXML では、クエリ結果を受信しても、そのデータの内容に基づいて何らかの動作が行われるわけではありません。データの種類や内容に基づいて追加処理は行われず、操作を実行するためのコードとしてデータが使用されることはありません。
- XML テンプレートを実行すると、SQLXML では送信されたテンプレート内に含まれる XPath クエリと DBObject クエリが Transact-SQL コマンドに変換され、そのコマンドが SQL Server に対して実行されます。これらのコマンドは、既存のデータにのみ影響します。SQLXML により生成されるコマンドでは、データベースの構造は変更されません。データベースの構造を変更するには、ユーザーは明示的なコマンドを発行する必要があります。たとえば、テンプレートの sql:query ブロックにコマンドを含めます。
- DBObject クエリと XPath ステートメントをマッピング ファイルに対して実行しても、SQLXML でデータベース内のデータは一切変更されません。
- SQLXML では、XML と SQL Server データ モデルの違いに基づき、指定されたデータの形式が変更される場合があります。たとえば、時間を指定する形式はこれら 2 つで異なるため、SQLXML ではこの違いの解決が試みられます。この結果、一部の精度情報が失われる場合があります。
- SQLXML では、データ処理は時間の制限なく、エラーが発生するか処理が完了するまで続けられます。
- SQLXML ではファイル システムへの書き込みは行われません。データベースから取得したデータを保存するには、ユーザーが自分でコードを作成する必要があります。
- SQLXML では、ユーザーはデータベースに対して任意の SQL クエリを実行できます。この場合、ユーザーの設定なしで SQL データベースを公開することになるため、保護または制御されていないソースに対してこの機能は提供しないでください。
- アップデートグラムを実行すると、SQLXML では updg:sync ブロックが SQL Server インスタンスに対する DELETE、UPDATE、および INSERT コマンドに変換されます。これらのコマンドは、既存のデータにのみ影響します。SQLXML により生成されるコマンドでは、データベースは変更されません。データベースの構造を変更するには、ユーザーは明示的なコマンドを発行する必要があります。たとえば、テンプレートの sql:query ブロックにコマンドを含めます。
- DiffGrams を実行すると、SQLXML では DiffGram が SQL Server インスタンスに対する DELETE、UPDATE、および INSERT コマンドに変換されます。これらのコマンドは、既存のデータにのみ影響します。SQLXML により生成されるコマンドでは、データベースは変更されません。データベースの構造を変更するには、ユーザーは明示的なコマンドを発行する必要があります。たとえば、テンプレートの sql:query ブロックにコマンドを含めます。