SQLXML のセキュリティに関する主な注意点

適用対象: SQL Server Azure SQL Database

次に、データ アクセスに SQLXML を使用するときのセキュリティ ガイドラインを示します。

  • SQLXMLOLEDB プロバイダーは、 StreamFlags プロパティを公開します。これにより、特定のインスタンスごとに有効または無効にする SQLXML 機能を示すフラグを設定できます。 このプロパティを使用して、必要なコンポーネントだけが有効になるよう、SQLXML の使用をカスタマイズすることをお勧めします。 詳細については、「 SQLXMLOLEDB Provider (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 は sql Server インスタンスに対して updg:sync ブロックを DELETE、UPDATE、INSERT コマンドに変換します。 これらのコマンドは、既存のデータにのみ影響します。 SQLXML により生成されるコマンドでは、データベースは変更されません。 データベースの構造を変更するには、ユーザーは明示的なコマンドを発行する必要があります。 たとえば、テンプレートの sql:query ブロックに含めます。

  • DiffGram を実行すると、SQLXML は SQL Server インスタンスに対して DiffGram を DELETE、UPDATE、INSERT コマンドに変換します。 これらのコマンドは、既存のデータにのみ影響します。 SQLXML により生成されるコマンドでは、データベースは変更されません。 データベースの構造を変更するには、ユーザーは明示的なコマンドを発行する必要があります。 たとえば、テンプレートの sql:query ブロックに含めます。

参照

SQLXML 4.0 のセキュリティに関する考慮事項