Microsoft Data Access Components ( MDAC 、 Windows DACとも呼ばれる) は、相互に関連するMicrosoftテクノロジーのフレームワークであり、プログラマーがほぼすべてのデータ ストアにアクセスできるアプリケーションを統一的かつ包括的に開発できるようにします。そのコンポーネントには、 ActiveX Data Objects (ADO)、OLE DB、およびOpen Database Connectivity (ODBC) が含まれます。また、Jet Database Engine 、MSDASQL (ODBC 用の OLE DB プロバイダー)、Remote Data Services (RDS) など、廃止されたコンポーネントもいくつかあります。さらに、以前のData Access Objects APIやRemote Data Objectsなど、廃止されたコンポーネントもあります。
MDACの最初のバージョンは1996年8月にリリースされました。当時、マイクロソフトはMDACはスタンドアロンプログラムというよりはコンセプトであり、広く普及した配布方法はないと述べていました。その後、マイクロソフトはMDACのアップグレード版をWebベースの再頒布可能パッケージとしてリリースしました。最終的に、後のバージョンはMicrosoft WindowsとInternet Explorerに統合され、MDAC 2.8 SP1では再頒布可能パッケージとしての提供を終了しました。
MDACは、その歴史を通じて数々のセキュリティ上の欠陥に悩まされてきました。これらの欠陥は、権限昇格攻撃などの攻撃につながりましたが、脆弱性は概ね後のバージョンで比較的迅速に修正されました。現在のバージョンは2.8サービスパック1ですが、この製品には多くの異なるバージョンが存在し、そのコンポーネントの多くは廃止され、より新しいMicrosoftテクノロジーに置き換えられています。MDACは現在、 Windows VistaではWindows DACとして知られています。
MDAC の最新バージョン (2.8) は、複数の相互作用するコンポーネントで構成されており、ODBC (複数のプラットフォームで利用可能)を除いて、すべてWindows固有のものです。MDAC アーキテクチャは、プログラミング インターフェイス レイヤー ( ADOおよびADO.NETで構成)、データベース ベンダー (Oracle や Microsoft など) によって開発されたデータベース アクセス レイヤー ( OLE DB、.NET マネージド プロバイダー、ODBCドライバー)、およびデータベース自体の 3 つのレイヤーとして見ることができます。これらのコンポーネント レイヤーはすべて、MDAC APIを介してアプリケーションから利用できます。Microsoft SQL Server固有の独自のアクセス方法である Microsoft SQL Server ネットワーク ライブラリも MDAC に含まれています。Windows アプリケーションの開発者は、データ アクセスに ADO または ADO.NET を使用することが推奨されます。その利点は、アプリケーション プログラムのユーザーが、MDAC でサポートされているデータベース アーキテクチャを選択する際に制約を受けないことです。もちろん、開発者は OLE DB や ODBC に直接アクセスするアプリケーションを作成することもできます。
Microsoft SQL Server ネットワーク ライブラリ (Net-Lib とも呼ばれます) は、Microsoft SQL Server がさまざまなネットワーク プロトコルを使用してデータを読み書きするために使用されます。Net-Lib は SQL Server 専用のライブラリですが、Microsoft は MDAC に同梱しています。SQL Server は、Open Data Services (ODS) ライブラリを使用して Net-Lib と通信します。Net-Lib は、Windows NTオペレーティングシステムのWin32サブシステムと直接インターフェースします。SQL Server ネットワーク ライブラリは、SQL Server に同梱されているクライアント ネットワーク ユーティリティを使用して制御されます。
Net-Lib がサポートする各ネットワーク プロトコルには、それぞれ専用のドライバ (デバイス ドライバとは異なります) があり、プロトコル スタックにセッション レイヤーのサポートがあります。Net-Lib には、プライマリ Net-Lib とセカンダリ Net-Lib の 2 種類があります。プライマリ Net-Lib は、Super Socket Net-Lib と共有メモリNet-Lib で構成され、セカンダリ Net-Lib には、TCP/IPや名前付きパイプネットワーク ライブラリ (名前付きパイプは、ID が割り当てられたシステム永続パイプラインを介して他のプロセスと通信する方法です) など、多数の種類があります。Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、プライマリ Net-Lib を介して通信します。
Super Socket Net-Lib は、コンピュータ間の通信を処理し、セカンダリ Net-Lib を調整します。ただし、TCP/IP セカンダリ Net-Lib は例外で、Windows Sockets 2 API を直接呼び出します。Banyan VINES、AppleTalk、ServerNet、IPX/SPX、Giganet、およびRPC Net-Lib は、MDAC 2.5 以降で削除されました。ネットワーク ライブラリ ルータは、これらのプロトコルすべてを管理する役割を担っていましたが、現在では名前付きパイプ セカンダリ Net-Lib のみがルータによって管理されます。Super Socket Net-Lib は、 Windows SSL APIを使用してデータ暗号化も処理します。
一方、共有メモリNet-Libは、1台のコンピュータ上に存在する複数のSQL Serverインスタンス間の接続を管理します。プロセス間の通信には共有メモリ領域を使用します。これは本質的に安全です。オペレーティングシステムが他のプロセスによるインスタンスの共有メモリ領域へのアクセスを許可しないため、1台のコンピュータ上に存在するSQL Serverインスタンス間ではデータの暗号化は不要です。
Net-Lib は、認証接続 (信頼済み接続と呼ばれる) をサポートするプロトコルに対して、ログインしているユーザーのセキュリティ コンテキストのなりすましもサポートできます。これにより、Net-Lib はWindows 認証を使用して統合ログオン認証メカニズムを提供できます。Windows 認証は、Windows 98 または Windows Me ではサポートされていません。[ 1 ]
OLE DB (OLEDB または OLE-DB とも呼ばれる) を使用すると、MDAC アプリケーションはさまざまなタイプのデータストアに統一された方法でアクセスできます。Microsoft はこのテクノロジーを使用して、アプリケーションと、アプリケーションがアクセスする必要のあるデータ ストアを分離しました。これは、さまざまなアプリケーションが異なるタイプとソースのデータにアクセスする必要があり、必ずしもテクノロジー固有の機能にアクセスする方法を知る必要がないためです。このテクノロジーは概念的にコンシューマーとプロバイダーに分けられます。コンシューマーはデータへのアクセスを必要とするアプリケーションであり、プロバイダーはコンポーネント オブジェクト モデル(COM)を使用して OLE DB インターフェイスを公開するソフトウェア コンポーネントです。
OLE DB は、MDAC で使用されるデータベース アクセス インターフェイス テクノロジーです。OLE DB プロバイダーは、テキスト ファイルやスプレッドシートなどの単純なデータ ストアから、 OracleやSQL Serverなどの複雑なデータベースまで、さまざまなデータ ストアにアクセスできるように作成できます。ただし、データ ストア テクノロジーによって機能が異なる場合があるため、OLE DB プロバイダーは利用可能なすべてのインターフェイスを実装できるとは限りません。利用可能な機能は COM オブジェクトを使用して実装されます。OLE DB プロバイダーは、データ ストア テクノロジーの機能を特定の COM インターフェイスにマッピングします。Microsoft では、インターフェイスの可用性は「プロバイダー固有」であると呼んでいます。これは、関連するデータベース テクノロジーによっては適用できない場合があるためです。さらに、プロバイダーはデータ ストアの機能を拡張することもできます。これらの機能は、 Microsoft の用語ではサービスと呼ばれます。
Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、Microsoft がバージョン 6.5 以降のMicrosoft SQL Server向けに提供する OLE DB プロバイダーです。
ユニバーサルデータリンクファイル(または「.udlファイル」)は、接続属性を指定するための共通のユーザーインターフェイスを提供します。ユーザーは、データリンクプロパティダイアログボックスを使用して、接続情報を.udlファイルに保存することで、接続文字列に直接手動で指定する代わりに、接続情報を保存できます。したがって、これらのファイルは便利な間接参照機能を提供します。さらに、このダイアログボックスでは、さまざまなターゲットアプリケーション向けに、多数の代替OLE DBデータプロバイダを指定します。[ 2 ]
Open Database Connectivity (ODBC) は、ネイティブライブラリを呼び出すことができるプログラミング言語(通常はC ) を介してアクセスされるネイティブ インターフェイスです。MDAC では、このインターフェイスは DLL として定義されています。アクセスする必要のあるデータベースごとに、個別のモジュールまたはドライバが必要です。ODBC API の関数は、これらの DBMS 固有のドライバによって実装されます。Microsoft が MDAC で提供するドライバは SQL Server ODBC ドライバ (SQLODBC) と呼ばれ、(名前が示すように) Microsoft の SQL Server 用に設計されています。SQL Server v6.5 以降をサポートしています。[ 3 ] ODBC を使用すると、プログラムは、データベースの独自のインターフェイスを知ることなくデータベースにアクセスするSQLリクエストを使用できます。SQL リクエストを処理し、個々のデータベース システムが理解できるリクエストに変換します。Microsoft によると、「SQL Server 2012 以降、ODBC ドライバは、Microsoft Windows Azure SQL Database を含む最新のサーバー機能に合わせて更新され、Microsoft ODBC Driver for SQL Server としてリリースされます。」[ 3 ]
ActiveX Data Objects ( ADO ) は、OLE DB への高レベルなプログラミング インターフェイスです。階層型オブジェクトモデルを使用して、アプリケーションが OLE DB でサポートされているソースからデータをプログラムで作成、取得、更新、削除できるようにします。ADO は、一連の階層型 COM ベースのオブジェクトとコレクションで構成され、1 つのオブジェクトは他の多くのオブジェクトのコンテナとして機能します。プログラマは、ADO オブジェクトに直接アクセスしてデータを操作することも、いくつかの ADO メカニズムを介してデータベースにSQLクエリを送信することもできます。ADO は、9 つのオブジェクトと 4 つのコレクションで構成されています。
コレクションは以下のとおりです。
対象物は以下の通りです。
Provider='SQLOLEDB';Data Source='TheSqlServer'; Initial Catalog='Northwind';Integrated Security='SSPI';") として接続を指定する接続文字列を使用して、その「Open」メソッドでデータストアに接続します。[ 8 ]接続文字列の先頭は、接続オブジェクトが必要とするデータストア接続の種類を識別する必要があります。これは次のいずれかである必要があります。 Update。UpdateBatch新しいレコードの追加は、関数を使用して実行し、その後、またはメソッドAddNewを呼び出します。[ 13 ]レコードは、Delete メソッドを使用してレコードセットから削除し、その後、Update メソッドを呼び出します。ただし、参照整合性の違反など、何らかの理由で削除を実行できない場合は、メソッドの呼び出し後もレコードセットは編集モードのままになります。プログラマは、更新をキャンセルするために、関数を明示的に呼び出す必要があります。さらに、ADO はトランザクションをロールバック(サポートされている場合)したり、バッチ更新をキャンセルしたりできます。[ 14 ]レコードセットは、即時更新、バッチ更新、 [ 15 ]またはトランザクションの使用による 次の 3 つの方法のいずれかで更新することもできます。UpdateUpdateBatchUpdateCancelUpdateadLockOptimisticまたはadLockPessimisticロックを使用してロックされます。レコードが変更され、Updateメソッドが呼び出された後、データソースでデータが更新されます。adLockBatchOptimistic、 が呼び出されるたびにUpdateデータは一時バッファで更新されます。最後にUpdateBatchが呼び出されると、データはデータソースで完全に更新されます。この方法の利点は、すべてがメモリ上で実行されること、そして問題が発生した場合にUpdateCancelが呼び出され、更新がデータソースに送信されないことです。BeginTransメソッドを呼び出し、必要な更新を実行します。すべてが完了したら、プログラマはCommitTransメソッドを呼び出します。を呼び出すと、トランザクション内で行われた変更をキャンセルし、データベースをトランザクション開始前の状態にロールバックRollbackTransできます[ 16 ] 。ADO.NET は、ADO の最新バージョン (ADO 2.8 以降、現在では ADO Classic と呼ばれることが多い) であり、従来の ADO とともに MDAC 2.8 スタックの一部です。Microsoft .NET をベースに構築されています。ADO からの進化的なステップと見なされることもありますが、Microsoft によっていくつかの根本的な構造変更が行われました。ADO.NET は、.NET 用に特別に設計された OLE DB プロバイダーの修正版である .NET マネージド プロバイダーを介して実行されます。オブジェクト構造はもはや Recordset オブジェクトを中心に構築されていません。代わりに、Dataset オブジェクトを使用して、複数のソースから収集されたデータが格納されます。これはプログラマーには透過的です。従来の ADO Recordset とは異なり、Dataset の設計は、非接続データの使用を促進します。概念的には、Dataset オブジェクトは、あらゆる方向でデータを操作できる、それ自体が小さなインメモリ リレーショナル データベースと見なすことができます。変更をデータベースに反映させるには、データ ソースと DataSet オブジェクト間でデータを転送するDataAdapterオブジェクトが使用されます。 ADO.NET ではカーソルも非推奨となり、 DataReaderオブジェクトに置き換えられました。DataReaderオブジェクトは、大量の結果を一度に 1 レコードずつ効率的に処理し、保存しないために使用されます。[ 26 ]
MDACは継続的に進化するコンポーネントフレームワークです。そのため、以前はフレームワークの一部であったものの、その後非推奨になったり、フレームワークから完全に削除されたりしたコンポーネントがいくつかあります。
JetはJoint Engine Technologyの略で、Microsoft Access、Microsoft Exchange Server、Visual Basicで使用されるデータベースエンジンでした。Jetはリレーショナルデータベース管理システム(RDBMS)の一部であり、他のソフトウェアがMicrosoftデータベースにアクセスするために使用できる単一のインターフェースを提供しました。Jetはまた、セキュリティ、参照整合性、トランザクション処理、インデックス作成、レコードおよびページロック、データレプリケーションもサポートしていました。Jetの後のバージョンでは、エンジンが拡張され、SQLクエリの実行、 Unicode形式での文字データの格納、ビューの作成、Microsoft SQL Serverとの双方向レプリケーションが可能になりました。JetはMSDEに置き換えられ、さらにMSDEはSQL Server Expressに置き換えられました。
Jetには3つのモジュールがありました。1つ目はネイティブJet ISAMドライバで、Microsoft Accessデータベースファイル(MDB)を直接操作できるJetダイナミックリンクライブラリ(DLL)です。MDBは、索引逐次アクセス方式(ISAM)データベースの改良版でした。もう1つのモジュールはISAMドライバで、 Xbase、Paradox、Btrieve、FoxProファイルなどのISAMデータベースへのアクセスを可能にするDLLです。最後のモジュールはデータアクセスオブジェクト(DAO)DLLで、DAOによってプログラマはJetエンジンにアクセスできるようになりました。これは基本的に、Access BasicおよびVisual Basicアプリケーション開発者がJetにアクセスするために使用するオブジェクト指向データ言語でした。
同様に、 Jet データ ソース間のレプリケーションを可能にするMicrosoft Jet OLE DB プロバイダーおよびレプリケーション オブジェクト(JRO) は、MDAC 2.6 から削除されました[ 27 ]。
Microsoft OLE DB Provider for ODBC (MDAC) は、ActiveX Data Objects が任意の ODBC ドライバを介してデータベースにアクセスできるMSDASQLようにする OLE DB プロバイダでした。Microsoft は、インデックス サービス、 Active Directory、Jet、SQL Server、Oracle ( ) [ 28 ] 、インターネット パブリッシング用の複数の OLE-DB プロバイダを提供していましたが、特に指定がない限り、ADO はデフォルトで MSDASQL をプロバイダとして使用していました。MDAC 2.5 以降、Oracle ODBC ドライバと MSDASQL の両方が Oracle 7 をサポートし、Oracle 8i を部分的にサポートしました。サポートされなかった機能は次のとおりです。MSDAORA
Microsoft は当初、64 ビット オペレーティングシステム用の MSDASQL コンポーネントを非推奨にしました[ 29 ] 。Microsoft Oracle ODBC ドライバーは後に Oracle 9i をサポートする .NET マネージド Oracle プロバイダーに置き換えられました[ 30 ] 。しかし、Windows Server 2008とWindows Vista SP1には 64 ビット版の MSDASQL が同梱されています。
リモート データ サービス (RDS) では、サーバーから一連のデータを取得し、クライアントがそれを何らかの方法で変更してから、さらに処理するためにサーバーに送り返すことができました。[ 31 ]ループや条件文などのプログラミング構造で SQL を拡張するTransact-SQLが広く採用されるようになったため、この機能の必要性は低下し、最終的に MDAC 2.7 で非推奨となりました。Microsoft は、オープンなXMLベースの標準を介してクライアントがこれを行うことができるSOAP Toolkit 2.0 を開発しました。[ 3 ]
SQLXMLはSQL Server 2000向けに設計されましたが、MDAC 2.6で非推奨となりました。これにより、MicrosoftのリレーショナルデータベースをXPathで表示したり、データをXMLファイルとして表示したりすることができました。実際には非推奨になったわけではなく、MDACの以降のバージョンから削除されていますが、Microsoftはダウンロード可能なコンポーネントとして提供しており、64ビットオペレーティングシステムでサポートしています。
MicrosoftはMDACからいくつかのコンポーネントを完全に削除し、サポートを終了しました。それらは以下のとおりです。
マイクロソフトはこれまで、MDACの複数のバージョンをリリースしてきました。配布方法はバージョンごとに異なり、機能セットもそれぞれ異なります。
MDAC 1.0 は 1996 年 8 月に初めてリリースされました。[ 34 ] Microsoft によると、「MDAC 1.0 は、調整されたスタンドアロンのセットアップ プログラムというよりは、概念として存在していました。」MDAC 1.0 スタックは、ODBC 3.0、OLE DB 1.1、ADO 1.0、およびAdvanced Data Connector (ADC) 1.0で構成されていました。Microsoftによると、これは MDAC 1.5 の Remote Data Service の前身でした。また、Access/Jet、SQL Server、Oracleデータベース用の ODBC ドライバも含まれていました。MDAC 1.0 は、いくつかのメカニズムでリリースされました。Advanced Data Connector はInternet Information Server (IIS) 3.0 に同梱され、ダウンロード可能なcab ファイルとしても提供されました。OLE DB 1.1 と ADO 1.0 は、 Visual Studio 97に付属し、ダウンロードも可能な OLE DB 1.1 SDK に同梱されていました。[ 35 ] MDAC 1.0 には Active Server Pages が付属しており、Active Server Pages 自体は IIS 3.0 に付属しており、Visual InterDev 1.0 にも付属していました。[ 34 ]
MDAC 1.5は1997年9月から1998年3月にかけてリリースされ、MDAC 1.0よりも集中型の配布メカニズムを採用していました。Microsoft Internet Explorer 4.0、Internet Client SDK 4.0、そして1997年のプロフェッショナル開発者会議(PDC)で配布されたCD-ROMを通じてリリースされました。MDAC 1.5には5つのバージョンがありました。
MDAC 1.5の各バージョンは以下の要素で構成されていました。
このバージョンの MDAC には、権限昇格攻撃に対して脆弱なセキュリティ上の欠陥がありました。この脆弱性により、IIS と MDAC の両方がインストールされているシステムでは、権限のない Web ユーザーが IIS システム上で特権ユーザーとしてシェル コマンドを実行できるようになっていました。これにより、攻撃者は、マルチホームのインターネット接続 IIS システム上で、MDAC を使用して SQL やその他の ODBC データ要求をパブリック接続経由でプライベート バックエンド ネットワークにトンネルすることができました。また、ユーザーは IIS システム上の保護された非公開ファイルへの不正アクセスも可能になりました[ 36 ]
MDAC 1.5は、Windows NT 3.51 SP5でサポートされた最後のデータアクセスコンポーネントのリリースでした。
MDAC 2.0 は Data Access 2.0 SDK とともに配布され、MDAC 1.5、ODBC 3.5 SDK、OLE DB 1.5 SDK、および OLE DB for OLAP仕様の内容が含まれていました。また、コア製品に対する多くの更新も含まれており、[ 35 ] RDS にセキュリティ機能が追加され、IIS サーバーで悪意を持って使用されるのを防止しました。[ 37 ] [ 38 ] [ 39 ]このバージョンは Windows NT 4.0 SP4 に含まれており、[ 34 ]また、完全な Data Access SDK が付属する Visual Studio 6.0 にも含まれていました。[ 35 ]
MDAC 2.1 はSQL Server 7.0 および SQL Server 6.5 SP5 に同梱されていました。MDAC 2.1 SP1 は Internet Explorer 5 に同梱され、MDAC 2.1 SP1a (GA) はMicrosoft Office 2000、BackOffice 4.5、および Visual Studio 98 SP3 に同梱されていました。ただし、これらのバージョンの MDAC はいずれもWorld Wide Webを通じて一般に公開されませんでした。MDAC 2.1 SP2 は Microsoft の Web サイトから配布されました。2.1 に同梱されていたコンポーネントは以下のとおりです。
このバージョンにはセキュリティ上の脆弱性があり、チェックされていないバッファによって特権昇格攻撃が可能でした。これはしばらく後に発見され、MDAC 2.1、2.5、2.6 に影響があり、後のパッチで対処されました[ 40 ] [ 41 ]
MDAC 2.5は2000年2月17日にリリースされ、Windows 2000に同梱されました。MDACサービスパックはWindows 2000サービスパックと並行してリリースされ、MicrosoftのWebサイトからも配布されました。リリースされたサービスパックは3つです。2.5に含まれるコンポーネントは以下のとおりです。
このバージョンの MDAC にはいくつかの問題が見つかりました。OLE DB セッション プーリングを使用すると、Microsoft COM+ がOLE DB を継続的にロードおよびアンロードしようとし、競合が発生して OLE DB セッション プーリングが CPU 使用率 100% で実行される可能性がありました。これは後に修正されました。[ 42 ] Microsoft は、MDAC 2.5 Service Pack 2 および MDAC 2.5 Service Pack 3 で修正されたバグの完全なリストを公開しました。[ 43 ] [ 44 ]また、セキュリティ上の脆弱性も存在し (後に修正)、SQL Server ドライバーにチェックされていないバッファが見つかりました。この欠陥は MDAC 2.5 SP2 で導入されました。
MDAC 2.6 は 2000 年 9 月にリリースされ、ウェブおよび Microsoft SQL Server 2000 を通じて配布されました[ 45 ]。MDAC 2.6 RTM、SP1 (2001 年 6 月 20 日リリース)、および SP2 (2002 年 6 月 11 日リリース) は、Microsoft SQL Server 2000 サービス パックと並行して配布され、Microsoft の Web サイトからもダウンロードできました。
このバージョンの MDAC から、Microsoft Jet、Microsoft Jet OLE DB プロバイダー、および ODBC デスクトップ データベース ドライバーは含まれなくなりました。代わりに、これらは手動でインストールできます。[ 46 ] Microsoft はまた、MDAC 2.6 を SQL Server 7.0 クラスターにインストールすべきではないという警告をリリースしました。「クラスター内の任意のノードに、直接または別のプログラムのインストールを介して MDAC 2.6 以降をインストールすると、SQL Server エージェントまたは他の SQL Server サービスに致命的な障害が発生する可能性がある」ためです。[ 47 ]この問題は、Microsoft SQL Server 2000 Desktop Engine (MSDE 2000) をデータベースとしてインストールするVeritas Softwareの Backup Exec 9.0 for Windows Servers に影響しました。リビジョン 4367 では MDAC バージョン 2.6 SP2 がインストールされ、リビジョン 4454 では MDAC バージョン 2.7 SP1 がインストールされましたが、こちらには問題はありませんでした。[ 48 ]
MDAC 2.7 は、2001 年 10 月に Microsoft の Web サイトを通じてリリースされました。2002 年 4 月には、Windows XP のリリースに伴い、Microsoft の Web サイトを通じて更新版がリリースされました。バージョン 2.7 は、米国英語、中国語 (繁体字および簡体字)、ドイツ語、日本語、韓国語、ブラジルポルトガル語、チェコ語、デンマーク語、ギリシャ語、スロバキア語、スロベニア語、スペイン語、フィンランド語、フランス語、ハンガリー語、イタリア語、オランダ語、ノルウェー語、ポーランド語、ポルトガル語、ロシア語、スウェーデン語、トルコ語で利用可能でした。ヘブライ語とアラビア語は、Windows XP でのみ利用可能でした。
主な機能変更は、Microsoft の64 ビットオペレーティング システムのサポートでしたが、このバージョンの MDAC からはBanyan VINESのサポートも削除されました。既知の問題がいくつかありました。 [ 49 ] MDAC 2.7 は、Microsoft SQL Server 6.5 または SQL Server 7.0 を実行しているクラスタ サーバーで接続の問題を引き起こし続け、Microsoft から回避策が提供されていませんでした。Microsoft SQL Server ODBC ドライバーを使用してODBCデータ ソース名(DSN) を作成または構成すると、DSN が名前付きパイプを使用するように構成されている場合でも、ネットワーク ライブラリ プロトコルが予期せずTCP/IPに切り替わる可能性がありました。[ 50 ]この問題はInfoWorld の記者Randall C. Kennedyによって発見され、変更は実際には MDAC 2.6 で行われたが文書化されていなかったことが判明しました。これは、Windows XP コンピューターでクライアント/サーバー データベース ワークロードをテストしているときに発見されました。InfoWorld は、TCP/IP を使用した場合、サーバーの CPU 使用率は全体で 8 パーセントしか上昇しなかったが、10ユーザーのワークロードでは、1 秒あたりのコンテキスト スイッチが150 パーセント以上減少したと主張している (これは、コンテキスト スイッチ レートが負になるため、もちろん不可能である。減少率は、執筆時に著者がどの惑星にいたかによって 33 パーセントまたは 60 パーセントとなる)。Net-Lib のデフォルトの動作に対する根本的な機能変更が、無関係な文書で軽く触れられるだけで行われたことに、彼らは感銘を受けなかった。[ 51 ] Windows XP ユーザーは、SQL Server がローカル コンピューターで見つけた証明書を使用しようとするが、使用可能な証明書が複数ある場合、どれを使用すればよいかわからないため、SQL Server への接続に問題が発生することもあった。[ 52 ] Microsoft Analysis Services 2000 RTMを使用しようとすると、キューブを参照しようとしたときにエラーが表示されることがあった。[ 53 ]マイクロソフトは、 Windows 95、Windows 98、およびWindows Meのセットアップ プログラムに、インストール エラーが発生したときに MDAC インストール プログラムがロールバックできないという問題も発見しました。 [ 54 ]
Microsoft は MDAC 2.7 でいくつかのセキュリティ問題を解決しました。Next Generation Security Software LtdのDavid Litchfield氏は、データ ソースへの接続に使用される MDAC の ODBC 関数の 1 つにチェックされていないバッファが含まれていることが原因で発生するセキュリティ脆弱性を報告しました。[ 55 ]修正されたもう 1 つの脆弱性は、攻撃者がクライアントからブロードキャストされた SQL Server 検出メッセージに、バッファ オーバーフローを引き起こす可能性のある特別に細工されたパケットで応答できるというものでした。[ 56 ]また、攻撃者が別の特別に細工されたパケットでブロードキャストに応答すると、コードがリモートで実行できるという別の欠陥も発見されました。[ 57 ]
MDAC 2.8 は 2003 年 8 月にリリースされ、Microsoft Windows Server 2003とともに配布されたほか、Microsoft のデータ アクセス テクノロジーのWeb サイトでも配布されました。このバージョンでは製品に新しい機能は追加されませんでしたが、いくつかのバグとセキュリティ上の問題が修正されました。レジストリの変更を自動化する reg ファイルにより、サーバーが「安全でない」モードで実行され、RDS が悪用されてシステムへの不正アクセスが可能になる問題が修正されました[ 58 ]。また、Shape クエリ文字列の長さに新しい制限が課されました[ 59 ] 。さらに、ODBC アドミニストレーターにもいくつかの変更がありました[ 60 ] 。
2005 年 5 月 23 日、ブラッド・ローズ (Microsoft データ アクセス テクノロジーのリード プログラム マネージャー) は、MDAC 2.8 SP1 が Microsoft が出荷する最後のスタンドアロン再頒布可能 MDAC であると発表しました。MDAC は現在、Microsoft のオペレーティングシステムの公式コンポーネントですが、以前にリリースされた Web 頒布可能バージョンのバグ修正とセキュリティ修正は継続的に提供されます。[ 61 ] [ 62 ]ただし、Microsoft はSQL Native Client (SQLNCLI)と呼ばれる新しいコンポーネントを作成しました。これは、OLE DB ライブラリと ODBC ライブラリを 1 つの DLL に統合したスタンドアロン データ アクセス API です。これは、オペレーティングシステムの状態に依存するようになった MDAC から独立するように作成されました。開発者はこのライブラリにリンクすることで、MDAC を更新するオペレーティングシステムの更新によって、異なるバージョンの MDAC 用に構築されたアプリケーションが壊れる状況を回避できます。[ 63 ]
Windows 7 SP1 では、 MDAC 2.8 の前方互換性が失われています。MDAC ADO に依存する Windows 7 SP1 でコンパイルされたソフトウェアは、Windows 7 SP1 より前の Windows バージョン (Windows 7 RTM、Vista、XP を含む) では動作しません。[ 64 ] Microsoft は、一部のアプリケーションでこの問題を回避するソリューションを提供していますが、VBA アプリケーションは影響を受けたままです。[ 65 ]この問題の修正プログラムは 2012 年 2 月にリリースされました。[ 66 ]
Windows Vista では、MDAC は使用されなくなり、代わりに ADO、OLE DB、ODBC コンポーネントの更新バージョンで構成される Windows DAC が使用されます。Microsoft によると、「Windows DAC には Windows Vista で動作するための変更がいくつか含まれていますが、機能的には MDAC 2.8 とほぼ完全に同等です。」[ 67 ]
コンピュータにインストールされている MDAC のバージョンを確認する方法は 2 つあります。Windows 2000、Windows XP、Windows Server 2003 の場合、1 つの方法は、インストールされている各 MDAC DLL の値を MDAC ファイル マニフェストと比較する Microsoft のコンポーネント チェッカー プログラムを使用することです。2 番目の方法は、Windows レジストリHKEY_LOCAL_MACHINE\Software\Microsoft\DataAccess\FullInstallVerのキーを確認することです。Microsoft は、この情報は、システムにインストールされている MDAC ファイルのバージョンと比較した場合、2.1 より前のバージョンの MDAC では正しくない可能性があると指摘しています[ 68 ]。