Введение

Фреймворк Microsoft Data Access Components (MDAC; также известный как Windows DAC) — это фреймворк взаимосвязанных технологий Microsoft, который предоставляет программистам унифицированный и всесторонний способ разработки приложений, способных получать доступ практически к любому хранилищу данных. Его компоненты включают в себя: ActiveX Data Objects (ADO), OLE DB и Open Database Connectivity (ODBC). Также существовали несколько компонентов, которые устарели, таких как Jet Database Engine, MSDASQL (провайдер OLE DB для ODBC) и Remote Data Services (RDS). Некоторые компоненты, такие как бывший API для объектов доступа к данным и объекты удаленных данных, стали неактуальными. Первая версия MDAC была выпущена в августе 1996 года. В то время Microsoft заявила, что MDAC — это скорее концепция, чем самостоятельная программа, и не имела широкой системы распространения. Позже Microsoft выпускала обновления MDAC в виде веб-пакетов для перераспределения. В конечном итоге более поздние версии были интегрированы с Microsoft Windows и Internet Explorer, а в MDAC 2.8 SP1 компания Microsoft прекратила предлагать MDAC в качестве перераспределяемого пакета. На протяжении всей своей истории MDAC был подвержен нескольким уязвимостям в системе безопасности, что приводило к атакам, таким как атака с повышением привилегий, хотя эти уязвимости обычно устранялись в более поздних версиях и достаточно оперативно. Текущая версия — 2.8 Service Pack 1, но продукт имел множество различных версий, и многие его компоненты устарели и были заменены новыми технологиями Microsoft. В Windows Vista MDAC известен как Windows DAC.

Архитектура

Последняя версия MDAC (2.8) состоит из нескольких взаимодействующих компонентов, все из которых являются специфичными для Windows, за исключением ODBC (который доступен на нескольких платформах). Архитектуру MDAC можно рассматривать как три уровня: уровень программного интерфейса, состоящий из ADO и ADO. NET, уровень доступа к базам данных, разработанный поставщиками баз данных, такими как Oracle и Microsoft (OLE DB, управляемые провайдеры .NET и драйверы ODBC), и сама база данных. Все эти слои компонентов предоставляются приложениям через MDAC API. Сетевая библиотека Microsoft SQL Server, проприетарный метод доступа, специфичный для Microsoft SQL Server, также входит в состав MDAC. Разработчикам Windows-приложений рекомендуется использовать ADO или ADO. NET для доступа к данным, что позволяет пользователям приложения не быть ограниченными в выборе архитектуры базы данных, кроме требования её поддержки MDAC. Разумеется, разработчики по-прежнему могут создавать приложения, которые напрямую обращаются к OLE DB и ODBC.

Сетевая библиотека Microsoft SQL Server

Сетевая библиотека Microsoft SQL Server (также известная как Net Lib) используется Microsoft SQL Server для чтения и записи данных, используя различные сетевые протоколы. Несмотря на то, что Net Lib специфична для SQL Server, Microsoft включает её в MDAC. SQL Server использует библиотеку Open Data Services (ODS) для связи с Net Lib, которая напрямую взаимодействует с подсистемой Win32 операционных систем Windows NT. Управление Сетевой библиотекой SQL Server осуществляется с помощью клиентской сетевой утилиты, поставляемой вместе с SQL Server. Каждый поддерживаемый Net Lib сетевой протокол имеет отдельный драйвер (не следует путать с драйвером устройства) и поддерживает сеансовый уровень в своем стеке протоколов. Существует два основных типа Net Lib: первичный и вторичный. Первичный Net Lib состоит из Super Socket Net Lib и Shared Memory Net Lib, в то время как существует множество вторичных Net Lib, включая TCP/IP и сетевые библиотеки именованных каналов (именованные каналы – это способ связи с другими процессами посредством системного постоянного канала, которому присвоен идентификатор). Microsoft OLE DB Provider for SQL Server (SQLOLEDB) взаимодействует через первичные Net Lib. Super Socket Net Lib отвечает за межкомпьютерную связь и координирует работу вторичных Net Lib, хотя вторичный Net Lib TCP/IP является исключением, поскольку он напрямую обращается к Windows Sockets 2 API. Banyan VINES, AppleTalk, ServerNet, IPX/SPX, Giganet и RPC Net Lib были удалены из MDAC 2.5 и более поздних версий. Ранее маршрутизатор Network Library отвечал за управление всеми этими протоколами, однако теперь он управляет только вторичным Net Lib именованных каналов. Super Socket Net Lib также обрабатывает шифрование данных с использованием Windows SSL API. Shared Memory Net Lib, в свою очередь, управляет соединениями между несколькими экземплярами SQL Server, работающими на одном компьютере. Для связи между процессами используется область общей памяти. Это по своей природе безопасно: шифрование данных между экземплярами SQL Server, работающими на одном компьютере, не требуется, поскольку операционная система не разрешает другим процессам доступ к области общей памяти этих экземпляров. Net Lib также поддерживает имитацию контекста безопасности вошедшего в систему пользователя для протоколов, поддерживающих аутентифицированные соединения (так называемые доверенные соединения). Это позволяет Net Lib предоставлять интегрированный механизм аутентификации входа с использованием Windows Authentication. Windows Authentication не поддерживается в Windows 98 или Windows Me.

ОЛЭ ДБ

OLE DB (также называемая OLEDB или OLE DB) позволяет приложениям MDAC получать доступ к различным типам хранилищ данных единообразным способом. Microsoft использовала эту технологию, чтобы отделить приложение от данных, позволяя хранить данные, к которым необходимо получить доступ, на веб-сайте или в другом хранилище. Это было сделано потому, что разные приложения нуждаются в доступе к разным типам и источникам данных и не обязательно должны знать, как использовать специфические для технологии функции доступа. Технология концептуально разделена на потребителей и поставщиков. Потребители – это приложения, которым нужен доступ к данным, а поставщик – программный компонент, который предоставляет интерфейс OLE DB посредством компонентной объектной модели (или COM). OLE DB – это технология интерфейса доступа к базам данных, используемая MDAC. Провайдеры OLE DB могут быть созданы для доступа к таким простым хранилищам данных, как текстовый файл или электронная таблица, и до таких сложных баз данных, как Oracle и SQL Server. Однако, поскольку различные технологии хранения данных могут обладать разными возможностями, провайдеры OLE DB могут не реализовывать все доступные интерфейсы. Доступные возможности реализуются с помощью объектов COM, и провайдер OLE DB сопоставляет функциональность технологии хранения данных с конкретным интерфейсом COM. Microsoft называет наличие интерфейса "специфичным для поставщика", поскольку его применимость может зависеть от используемой технологии базы данных. Кроме того, провайдеры могут расширять возможности хранилища данных; эти возможности в терминологии Microsoft называются службами. Microsoft OLE DB Provider for SQL Server (SQLOLEDB) – это провайдер OLE DB, который Microsoft предоставляет для Microsoft SQL Server, начиная с версии 6.5.

Универсальная связь передачи данных

Универсальные файлы связи данных (или файлы с расширением '.udl') предоставляют единый пользовательский интерфейс для указания атрибутов подключения. Пользователь может использовать диалоговое окно "Свойства связи данных" для сохранения информации о подключении в файл .udl вместо непосредственного указания параметров вручную в строке подключения. Таким образом, эти файлы обеспечивают удобный уровень косвенности. Кроме того, в этом диалоговом окне указывается ряд альтернативных поставщиков данных OLE DB для различных целевых приложений.

ОДБК

Open Database Connectivity (ODBC) — это нативный интерфейс, к которому осуществляется доступ через язык программирования (обычно C), способный вызывать нативную библиотеку. В MDAC этот интерфейс представлен в виде DLL. Для каждой базы данных, к которой требуется доступ, необходим отдельный модуль или драйвер. Функции ODBC API реализуются этими драйверами, специфичными для СУБД. Драйвер, предоставляемый Microsoft в MDAC, называется SQL Server ODBC Driver (SQLODBC) и, как следует из названия, предназначен для Microsoft SQL Server. Он поддерживает SQL Server версии 6.5 и выше. ODBC позволяет программам использовать SQL-запросы для доступа к базам данных, не требуя знания проприетарных интерфейсов этих баз данных. Он обрабатывает SQL-запрос и преобразует его в запрос, понятный конкретной системе управления базами данных. По информации Microsoft, "После SQL Server 2012 драйвер ODBC будет обновляться для поддержки новейших функций сервера, включая Microsoft Windows Azure SQL Database, и выпускаться как Microsoft ODBC Driver for SQL Server".

ADO.NET

ADO.NET – это новейшая версия ADO (после ADO 2.8, теперь часто называемой ADO Classic) и является частью стека MDAC 2.8 вместе с классической ADO. Она построена на основе Microsoft .NET. Хотя иногда её рассматривают как эволюционное развитие ADO, Microsoft внесла в неё некоторые фундаментальные структурные изменения. ADO.NET работает через NET Managed Provider – модифицированную версию провайдера OLE DB, специально разработанную для .NET. Объектная структура больше не строится вокруг объекта Recordset. Вместо этого используется объект Dataset для хранения данных, полученных из нескольких источников. Это прозрачно для программиста. В отличие от старого ADO Recordset, конструкция Dataset способствует использованию разобщенных данных. Концептуально объект Dataset можно рассматривать как небольшую реляционную базу данных в памяти, позволяющую манипулировать данными в любом направлении. Для передачи изменений обратно в базу данных используется объект DataAdapter, который осуществляет перенос данных между источником данных и объектом DataSet. Курсоры также были упразднены в ADO.NET и заменены объектом DataReader, который используется для эффективной обработки большого списка результатов по одной записи за раз без их сохранения в памяти.

Недействительные и устаревшие компоненты

MDAC — это постоянно развивающийся компонентный фреймворк. В связи с этим, некоторые компоненты, которые ранее входили в его состав, устарели или были полностью удалены из фреймворка.

Jet Database Engine и JRO

Jet – это аббревиатура от Joint Engine Technology и являлся движком баз данных, используемым в Microsoft Access, Microsoft Exchange Server и Visual Basic. Jet был частью системы управления реляционными базами данных (RDBMS) и предоставлял единый интерфейс, который другое программное обеспечение могло использовать для доступа к базам данных Microsoft. Jet также обеспечивал поддержку безопасности, референциальной целостности, обработки транзакций, индексирования, блокировки записей и страниц, а также репликации данных. В более поздних версиях Jet движок был расширен для выполнения SQL-запросов, хранения символьных данных в формате Unicode, создания представлений и поддержки двунаправленной репликации с Microsoft SQL Server. Он был вытеснен MSDE, который, в свою очередь, был вытеснен SQL Server Express. Jet состоял из трех модулей. Один из них – Native Jet ISAM Driver, динамическая библиотека Jet (DLL), которая могла напрямую работать с файлами баз данных Microsoft Access (MDB), представлявшими собой модифицированную форму базы данных с индексированным последовательным методом доступа (ISAM). Другим модулем были ISAM Drivers, DLL, обеспечивающие доступ к базам данных ISAM, таким как файлы Xbase, Paradox, Btrieve и FoxPro. Третий модуль – DLL Data Access Objects (DAO), DAO предоставлял программистам доступ к движку Jet. По сути, это был объектно-ориентированный язык данных, используемый разработчиками приложений Access Basic и Visual Basic для доступа к Jet. Аналогично, Microsoft Jet OLE DB Provider и Replication Objects (JRO), обеспечивавшие репликацию между источниками данных Jet, были удалены из MDAC 2.6.

Услуги удаленного доступа к данным (RDS)

Удаленные службы данных (RDS) позволяли получать набор данных с сервера, который клиент изменял и затем отправлял обратно на сервер для дальнейшей обработки. С широким распространением Transact-SQL, расширяющего SQL возможностями программирования, такими как циклы и условные операторы, необходимость в RDS отпала, и они были упразднены в MDAC 2.7. Microsoft разработала SOAP Toolkit 2.0, позволяющий клиентам выполнять подобные операции, используя открытый стандарт на основе XML.

SQLXML

SQLXML был разработан для SQL Server 2000, но стал неактуальным с MDAC 2.6. Он позволял рассматривать реляционные базы данных Microsoft с помощью XPath и представлять данные в виде XML-файла. Фактически, SQLXML не был упразднен, но был исключен из более поздних версий MDAC, хотя Microsoft предоставляет его как загружаемый компонент и продолжит поддерживать его в своих 64-битных операционных системах.

Устаревшие компоненты

Несколько компонентов были полностью удалены из MDAC компанией Microsoft и больше не поддерживаются. Вот они:
ESQL/C: Embedded SQL (также известный как E SQL или ESQL/C) – это способ использования SQL при программировании на Visual C. Microsoft прекратила поддержку этой технологии после выпуска SQL Server 6.5, однако лицензировала часть среды выполнения ESQL/C компании Micro Focus, которая разрабатывает компиляторы и инструменты COBOL.
DAO: DAO (Data Access Objects) – это объектно-ориентированный интерфейс, разработанный Microsoft, который позволял ранним версиям Microsoft Access и Visual Basic обращаться к Jet Database Engine. В более поздней версии (3.5) он получил возможность обходить Jet-движок и напрямую обращаться к источникам данных ODBC.
RDO: Remote Data Objects (RDO) – это технология Microsoft, позволявшая создавать интерфейсы для непосредственного обращения к ODBC. Версия RDO 2.0 была последней версией, разработанной Microsoft.
DB Library: API на основе C, обеспечивающий взаимодействие приложения с SQL Server. Поддержка этой технологии прекращена во всех продуктах после SQL Server 2000, и после SQL Server 6.5 в нее не вносилось никаких изменений.

История

Microsoft выпустила несколько версий MDAC с течением времени. Способы распространения различались, и функциональность каждой версии отличается.

MDAC 1.0

MDAC 1.0 был впервые выпущен в августе 1996 года. По словам 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. Он также включал драйверы ODBC для баз данных Access/Jet, SQL Server и Oracle. MDAC 1.0 распространялся несколькими способами: Advanced Data Connector поставлялся с Internet Information Server (IIS) 3.0 и в виде загружаемого cab-файла; OLE DB 1.1 и ADO 1.0 поставлялись с SDK OLE DB 1.1, который входил в состав Visual Studio 97 и также был доступен для загрузки. MDAC 1.0 поставлялся вместе с Active Server Pages, которые сами были частью IIS 3.0, а также с Visual InterDev 1.0.

MDAC 1,5

MDAC 1.5 был выпущен в период с сентября 1997 года по март 1998 года и использовал более централизованный механизм распространения, чем MDAC 1.0. Он поставлялся вместе с Microsoft Internet Explorer 4.0, комплектом разработчика (SDK) для интернет-клиента версии 4.0, а также распространялся на CD-ROM, который выдавался на конференции профессиональных разработчиков (PDC) в 1997 году. Существовало пять версий MDAC 1.5:
MDAC 1.5 (первоначальный выпуск): поставлялся с Internet Explorer 4.0 и комплектом разработчика для Internet Client.
MDAC 1.5a: доступен для загрузки с веб-сайта Microsoft.
MDAC 1.5b: поставлялся с Windows NT 4.0 Option Pack и Office 97.
MDAC 1.5c: устранял проблемы с многопоточностью ADO и пулом соединений ODBC и распространялся через веб-сайт Microsoft. Он включал только компоненты времени выполнения ADO/MDAC.
MDAC 1.5d: поставлялся вместе с Windows 98 и пакетом обновления (Service Pack) 1 для Internet Explorer 4.01.
MDAC 1.5 был последней версией компонента доступа к данным, поддерживаемой в Windows NT 3.51 SP5.

MDAC 2.0

MDAC 2.0 распространялся вместе с SDK Data Access 2.0 и включал в себя содержимое MDAC 1.5, SDK ODBC 3.5, SDK OLE DB 1.5 и спецификацию OLE DB для OLAP. Эта версия поставлялась с Windows NT 4.0 SP4, а также с Visual Studio 6.0, которая включала в себя полный SDK для доступа к данным. В этой версии были обнаружены уязвимости в системе безопасности, позволяющие атаку с повышенными привилегиями из-за необработанного буфера. Это было выявлено позднее и затронуло MDAC 2.1, 2.5 и 2.6, и было устранено в последующем обновлении.

MDAC 2,6

MDAC 2.6 был выпущен в сентябре 2000 года и распространялся через Интернет, а также поставлялся вместе с Microsoft SQL Server 2000. MDAC 2.6 RTM, SP1 (выпущен 20 июня 2001 года) и SP2 (выпущен 11 июня 2002 года) распространялись параллельно с пакетами обновления Microsoft SQL Server 2000 и также были доступны для загрузки с веб-сайта Microsoft. Начиная с этой версии MDAC, Microsoft Jet, Microsoft Jet OLE DB Provider и драйверы ODBC для настольных баз данных не включались в состав дистрибутива. Вместо этого их можно было установить вручную. Microsoft также выпустила предупреждение о том, что MDAC 2.6 не следует устанавливать на кластер SQL Server 7.0, поскольку "установка MDAC 2.6 или более поздней версии на любом узле кластера, напрямую или через установку другой программы, может привести к критическому сбою агента SQL Server или других служб SQL Server". Эта проблема затронула Backup Exec 9.0 для Windows Server от Veritas Software, так как он устанавливает Microsoft SQL Server 2000 Desktop Engine (MSDE 2000) в качестве своей базы данных. Ревизия 4367 устанавливала MDAC версии 2.6 SP2, а ревизия 4454 – MDAC версии 2.7 SP1, в которой эта проблема отсутствовала.

MDAC 2, 7

MDAC 2.7 был выпущен в октябре 2001 года через веб-сайт Microsoft. Обновленная версия была выпущена в апреле 2002 года с выходом Windows XP и также через веб-сайт Microsoft. Версия 2.7 была доступна на английском, китайском (традиционном и упрощенном), немецком, японском, корейском, бразильском португальском, чешском, датском, греческом, словацком, словенском, испанском, финском, французском, венгерском, итальянском, голландском, норвежском, польском, португальском, русском, шведском и турецком языках. Иврит и арабский языки были доступны только через Windows XP. Основным изменением стала поддержка 64-битной операционной системы Microsoft, однако поддержка Banyan VINES также была исключена из этой версии MDAC. Было несколько известных проблем: MDAC 2.7 продолжал вызывать проблемы с подключением на кластерных серверах, работающих под управлением Microsoft SQL Server 6.5 или SQL Server 7.0, и Microsoft не предоставила обходного пути. При создании или настройке имен источников данных ODBC (DSN) с использованием драйвера ODBC Microsoft SQL Server, сетевой протокол библиотеки мог неожиданно переключаться на TCP/IP, даже если DSN был настроен на использование именованных каналов. Эту проблему обнаружил журналист InfoWorld Рэндолл К. Кеннеди, который установил, что изменение было внесено еще в MDAC 2.6, но не было задокументировано. Это было выявлено при тестировании клиент-серверных баз данных на компьютере с Windows XP. InfoWorld утверждает, что, хотя общая загрузка центрального процессора сервера увеличилась всего на 8% при использовании TCP/IP, количество переключений контекста в секунду упало более чем на 150% (что, конечно, невозможно, так как это привело бы к отрицательной скорости переключений контекста – падение составляет 33% или 60% в зависимости от того, на какой планете находился автор во время написания статьи) при нагрузке в 10 пользователей. Они остались недовольны тем, что фундаментальное изменение поведения Net Lib по умолчанию произошло без упоминания даже в стороннем документе. Пользователи Windows XP также иногда сталкивались с проблемами при подключении к SQL Server, поскольку SQL Server пытался использовать сертификаты, найденные на локальном компьютере, но не знал, какой из них выбрать, если доступно несколько сертификатов. При попытке использовать Microsoft Analysis Services 2000 RTM иногда возникала ошибка при попытке просмотра кубов. Microsoft также обнаружила проблему в программах установки Windows 95, Windows 98 и Windows Me, которая не позволяла программе установки MDAC откатываться при возникновении ошибки установки. Microsoft устранила несколько проблем безопасности в MDAC 2.7. Дэвид Литчфилд из Next Generation Security Software Ltd сообщил об уязвимости в системе безопасности, вызванной тем, что одна из функций ODBC в MDAC, используемая для подключения к источникам данных, содержала непроверенный буфер. Другая исправленная уязвимость заключалась в том, что злоумышленник мог отвечать на широковещательное сообщение об обнаружении SQL Server, отправляемое клиентами, специально сформированным пакетом, который мог вызвать переполнение буфера. Также была обнаружена другая ошибка, позволяющая удаленно выполнять код, когда злоумышленник отвечал на широковещание другим специально сформированным пакетом.

MDAC 2,8

MDAC 2.8 был выпущен в августе 2003 года и распространялся вместе с Microsoft Windows Server 2003, а также был доступен на веб-сайте Microsoft Data Access Technologies. Он не содержал новых функций, но исправил ряд ошибок и уязвимостей в системе безопасности. Был удален reg-файл (автоматизирующий изменения в реестре), который приводил к работе сервера в "небезопасном" режиме, позволяя использовать RDS для получения несанкционированного доступа к системе, и было введено новое ограничение на длину строки запроса Shape. Также были внесены несколько изменений в ODBC Administrator. 23 мая 2005 года Брэд Роудс (ведущий менеджер программы Microsoft Data Access Technologies) объявил, что MDAC 2.8 SP1 является последней автономной распространяемой версией MDAC, которую выпустит Microsoft. MDAC теперь является официальным компонентом операционной системы Microsoft, хотя Microsoft продолжит предоставлять исправления ошибок и уязвимостей для ранее выпущенных версий веб-распространяемой версии. Однако Microsoft создала новый компонент под названием SQL Native Client (SQLNCLI) – автономный API доступа к данным, объединяющий библиотеки OLE DB и ODBC в один DLL-файл. Он был разработан для независимости от MDAC, который теперь зависит от состояния операционной системы. Теперь разработчики подключаются к этой библиотеке, чтобы избежать ситуаций, когда обновление операционной системы, обновляющее MDAC, приводит к неработоспособности приложений, созданных для другой версии MDAC. Windows 7 SP1 нарушила обратную совместимость MDAC 2.8. Программное обеспечение, скомпилированное на Windows 7 SP1 и использующее MDAC ADO, не будет работать на версиях Windows, предшествующих Windows 7 SP1 (включая Windows 7 RTM, Vista и XP). Microsoft предоставила решения для обхода этой проблемы для некоторых приложений, но приложения VBA по-прежнему подвержены ей. Исправление этой проблемы было выпущено в феврале 2012 года.

Windows DAC 6.0 (полное обновление)

Windows Vista больше не будет использовать MDAC, а вместо этого будет использовать Windows DAC, состоящий из обновленных версий компонентов ADO, OLE DB и ODBC. По заявлению Microsoft, "Windows DAC содержит некоторые изменения для работы с Windows Vista, но практически полностью функционально эквивалентен MDAC 2.8".