ADO のセキュリティ設計機能

以下のセクションでは、ActiveX データ オブジェクト (ADO) 2.8 以降でのセキュリティ設計機能について説明します。 これらの変更は、セキュリティを強化するために ADO 2.8 で行われました。 Windows Vista の Windows DAC 6.0 に含まれる ADO 6.0 は、Windows XP および Windows Server 2003 の MDAC 2.8 に含まれていた ADO 2.8 と機能的に同等です。 このトピックでは、ADO 2.8 以降でアプリケーションのセキュリティ保護を最適にする方法について説明します。

重要

アプリケーションを以前のバージョンの ADO から更新する場合は、お客様に展開する前に、更新されたアプリケーションを非運用コンピューターでテストすることをお勧めします。 これにより、更新されたアプリケーションを展開する前に、互換性の問題を確実に把握できます。

Internet Explorer のファイル アクセスのシナリオ

次の機能は、Internet Explorer のスクリプト化された Web ページで ADO 2.8 以降を使う場合の動作に影響します。

変更されて改善されたセキュリティ警告メッセージ ボックスがユーザーへの警告に使用されるようになった

ADO 2.7 以前では、スクリプト化された Web ページが信頼されていないプロバイダーからの ADO コードを実行しようとすると、次の警告メッセージが表示されます。

This page accesses data on another domain. Do you want to allow this? To
avoid this message in Internet Explorer, you can add a secure Web site to
your Trusted Sites zone on the Security tab of the Internet Options dialog
box.

ADO 2.8 以降では、上のメッセージは表示されなくなります。 代わりに、このコンテキストでは次のメッセージが表示されます。

This Website uses a data provider that may be unsafe. If you trust the
Website, click OK, otherwise click Cancel.

上記のメッセージにより、ユーザーは情報に基づいて決定を下すことができ、それぞれを選んだ結果は次のようになります。

  • ユーザーがサイトを信頼している場合、[OK] をクリックすると、すべてのディスクセーフ コード (このトピックで後ほど説明するディスク アクセス可能な API を除くすべての ADO メソッドとプロパティ) はブラウザー ウィンドウで実行できます。

  • ユーザーがサイトを信頼していない場合、[キャンセル] をクリックすると、データ アクセス用の ADO コードの実行は完全にブロックされます。

ディスク アクセス可能なコードが信頼されているサイトに制限されるようになった

ADO 2.8 では、限られた API のセットの機能を明示的に制限する追加の設計変更が行われ、ローカル コンピューター上のファイルの読み取りまたは書き込みができるようになる可能性があります。 Internet Explorer の実行時に安全性のためにさらに制限されている API メソッドを次に示します。

これらのディスクにアクセスできる可能性がある関数の制限されたセットでは、これらのメソッドを使うコードが Internet Explorer で実行された場合、ADO 2.8 以降では次の動作が発生します。

  • コードを提供したサイトが以前に信頼済みサイト ゾーンの一覧に追加された場合、コードはブラウザーで実行され、ローカル ファイルへのアクセスが許可されます。

  • サイトが信頼済みサイト ゾーンの一覧にない場合、コードはブロックされ、ローカル ファイルへのアクセスは拒否されます。

    注意

    ADO 2.8 以降では、ユーザーは信頼済みサイト ゾーンの一覧にサイトを追加するように警告または推奨されません。 したがって、信頼済みサイトの一覧の管理は、ローカル ファイル システムにアクセスする必要のある Web サイト ベースのアプリケーションを展開またはサポートしているユーザーの責任です。

Recordset オブジェクトの ActiveCommand プロパティへのアクセスがブロックされる

Internet Explorer で実行したとき、ADO 2.8 はアクティブな Recordset オブジェクトの ActiveCommand プロパティへのアクセスをブロックし、エラーを返すようになります。 このエラーは、信頼済みサイトの一覧に登録されている Web サイトからのページかどうかに関係なく発生します。

OLE DB プロバイダーと統合セキュリティの処理での変更

ADO 2.7 以前のバージョンでの、潜在的なセキュリティの問題と懸念事項についての検討において、次のシナリオが検出されました。

場合によっては、統合セキュリティの DBPROP_AUTH_INTEGRATED プロパティをサポートする OLE DB プロバイダーにより、スクリプト化された Web ページが ADO の Connection オブジェクトを再利用し、ユーザーの現在のログイン資格情報を使って他のサーバーに誤って接続することが、許可される可能性があります。 これを防ぐため、ADO 2.8 以降では、OLE DB プロバイダーは、それらが統合セキュリティを提供すること、または提供しないことをどのように選んだかに応じて処理されます。

次の表では、信頼済みサイト ゾーンの一覧に含まれるサイトから読み込まれる Web ページについて、ADO 2.8 以降が各ケースで ADO 接続を管理する方法の詳細を示します。

ユーザー認証、ログオンに関する IE の設定 プロバイダーは "統合セキュリティ" をサポートし、UID と PWD が指定されている (SQLOLEDB) プロバイダーは "統合セキュリティ" をサポートしない (JOLT、MSDASQL、MSPersist) プロバイダーは "統合セキュリティ" をサポートし、SSPI に設定されている (UID/PWD は指定されていない)
現在のユーザー名とパスワードで自動的にログオンする 接続の許可 接続の許可 接続の許可
ユーザー名とパスワードを入力してログオンする 接続の許可 接続は失敗する 接続は失敗する
イントラネット ゾーンでのみ自動的にログオンする 接続の許可 セキュリティの警告をユーザーに表示する セキュリティの警告をユーザーに表示する
匿名でログオンする 接続の許可 接続は失敗する 接続は失敗する

セキュリティ警告が表示される場合、メッセージ ボックスにはユーザー向けに次のような情報が表示されます。

This Website is using your identity to access a data source. If you trust this Website, click OK, otherwise click Cancel.

上のメッセージを見て、ユーザーはよりいっそう情報に基づいた意思決定を行い、それに従って続行できます。

注意

信頼されていないサイト (つまり、信頼済みサイト ゾーンの一覧にないサイト) の場合、プロバイダーも信頼されていないと (このセクションで前に説明したように)、ユーザーには 2 つのセキュリティ警告が連続して表示されます。1 つ目は安全ではないプロバイダーに関する警告で、2 つ目は ID を使おうとしていることに関する警告です。 1 つ目の警告に対してユーザーが [OK] をクリックすると、前の表で説明した Internet Explorer の設定と応答動作コードが実行されます。

ADO の接続文字列でパスワード テキストが返されるかどうかを制御する

ADO の Connection オブジェクトの ConnectionString プロパティの値を取得しようとすると、次のイベントが発生します。

  1. 接続が開かれている場合は、基になる OLE DB プロバイダーに対して初期化の呼び出しが行われ、接続文字列が取得されます。

  2. DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO プロパティの OLE DB プロバイダーでの設定によっては、返される他の接続文字列情報と共にパスワードが含まれます。

たとえば、ADO 接続の動的プロパティ Persist Security InfoTrue に設定されている場合、パスワード情報が返される接続文字列に含まれます。 そうではなく、基になるプロバイダーがそのプロパティを False に設定している場合は (たとえば、SQLOLEDB プロバイダーの場合)、返される接続文字列ではパスワード情報が省略されます。

サード パーティ (つまり、Microsoft 以外) の OLE DB プロバイダーを ADO アプリケーション コードで使っている場合は、DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO プロパティの実装方法を調べて、パスワード情報を ADO 接続文字列に含めることが許可されているかどうかを判断できます。

レコードセットまたはストリームを読み込んで保存するときのファイル以外のデバイスのチェック

ADO 2.7 以前では、ファイル ベースのデータの読み取りと書き込みに使われていた OpenSave などのファイル入出力操作で、ディスクベース以外のファイルの種類を指定した URL またはファイル名を使用できる場合がありました。 たとえば、LPT1、COM2、PRN.TXT、AUX を、特定のものを使用するシステム上のプリンターと補助デバイスの間の入出力に対するエイリアスとして使用できました

ADO 2.8 以降では、この機能が更新されています。 RecordsetStream オブジェクトを開いて保存する場合、ADO はファイルの種類のチェックを実行し、URL またはファイル名で指定された入力または出力デバイスが実際のファイルであることを確認できます。

注意

このセクションで説明したファイルの種類のチェックは、Windows 2000 以降にのみ適用されます。 Windows 98 のような以前の Windows リリースで ADO 2.8 以降が実行されている状況には適用されません。