以降のセクションでは、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 メソッドを次に示します。
ADO Stream オブジェクトの場合、LoadFromFile または SaveToFile メソッドが使用される場合について説明します。
ADO Recordset オブジェクトの場合、save メソッドまたは Open メソッド (adCmdFile オプションが設定されている場合や、Microsoft OLE DB 永続化プロバイダー (MSPersist) が使用されている場合など)。
このようなディスクアクセス可能な可能性のある関数の限られたセットでは、これらのメソッドを使用するコードが 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 プロバイダーを提供するか、提供しないかを選択した方法に応じて、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 つのセキュリティ警告が行に表示され、安全でないプロバイダーに関する警告と、ID の使用に関する 2 つ目の警告が表示されることがあります。 ユーザーが最初の警告に対して [OK] をクリックすると、前の表で説明した Internet Explorer の設定と応答動作コードが実行されます。
ADO 接続文字列でパスワード テキストを返すかどうかを制御する
ADO Connection オブジェクトの ConnectionString プロパティの値を取得しようとすると、次のイベントが発生します。
接続が開いている場合は、基になる OLE DB プロバイダーに対して初期化呼び出しが行われ、接続文字列が取得されます。
DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO プロパティの OLE DB プロバイダーの設定に応じて、パスワードは返される他の接続文字列情報と共に含まれます。
たとえば、ADO Connection 動的プロパティ 永続化セキュリティ情報 が Trueに設定されている場合、返される接続文字列にパスワード情報が含まれます。 それ以外の場合、基になるプロバイダーがプロパティを False (SQLOLEDB プロバイダーなど) に設定している場合、返される接続文字列ではパスワード情報が省略されます。
サード パーティ (つまり、Microsoft 以外) の OLE DB プロバイダーを ADO アプリケーション コードと共に使用している場合は、DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO プロパティの実装方法を確認して、ADO 接続文字列にパスワード情報を含めることが許可されているかどうかを判断できます。
レコードセットまたはストリームを読み込んで保存するときのファイル以外のデバイスのチェック
ADO 2.7 以前の場合、ファイルベースのデータの読み取りと書き込みに使用された Open や Save などのファイル入出力操作では、ディスクベース以外のファイルの種類を指定した URL またはファイル名を使用できる場合があります。 たとえば、LPT1、COM2、PRN.TXT、AUX は、システム内でのプリンターと補助デバイス間の入出力のためのエイリアスとして使用される可能性があります。
ADO 2.8 以降では、この機能が更新されました。 Recordset オブジェクトと Stream オブジェクトを開いたり保存するために、ADO はファイルタイプを確認し、URL またはファイル名で指定された入力または出力デバイスが実際のファイルであることを確認します。
手記
このセクションで説明するファイルの種類のチェックは、Windows 2000 以降にのみ適用されます。 以前の Windows リリース (Windows 98 など) で ADO 2.8 以降が実行されている状況には適用されません。