Архитектура распределенных запросов
Microsoft SQL Server поддерживает два метода обращения к разнородным источникам данных OLE DB в инструкциях языка Transact-SQL.
Имена связанных серверов
Системные хранимые процедуры sp_addlinkedserver и sp_addlinkedsrvlogin используются для задания серверного имени источнику данных OLE DB. К объектам на этих связанных серверах можно обращаться в инструкциях языка Transact-SQL по четырехкомпонентным именам. Например, если имя связанного сервера DeptSQLSrvr определено для другого экземпляра SQL Server, для обращения к таблице на таком сервере используется следующая инструкция:
SELECT JobTitle, HireDate FROM DeptSQLSrvr.AdventureWorks2008R2.HumanResources.Employee;
Имя связанного сервера можно также указать в инструкции OPENQUERY для открытия набора строк из источника данных OLE DB. К этому набору строк можно обращаться в инструкциях языка Transact-SQL так же, как и к таблице:
Имена нерегламентированных соединителей
Для нечастых обращений к источнику данных используются функции OPENROWSET или OPENDATASOURCE, которыми задаются данные, необходимые для подключения к связанному серверу. Затем можно обращаться к набору строк в инструкциях языка Transact-SQL тем же путем, что и к таблице:
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\MSOffice\Access\Samples\Northwind.mdb';'Admin';''; Employees);
В SQL Server для коммуникации между реляционным механизмом и подсистемой хранилища используется технология OLE DB. Реляционный механизм разбивает каждую инструкцию языка Transact-SQL на последовательные операции над простыми наборами строк OLE DB, открываемые подсистемой хранилища из базовых таблиц. Это означает, что реляционный механизм может также открывать простые наборы строк OLE DB на любом источнике данных OLE DB.
В реляционном механизме используется прикладной программный интерфейс (API) OLE DB для открытия наборов строк на связанных серверах, выборки строк и управления транзакциями.
Для каждого источника данных OLE DB, доступ к которому осуществляется как к связанному серверу, на сервере с запущенной службой SQL Server должен быть поставщик OLE DB. Набор операций языка Transact-SQL, которые можно использовать с конкретным источником данных OLE DB, зависит от возможностей поставщика OLE DB. Дополнительные сведения см. в разделе Справочник по поставщику OLE DB для распределенных запросов.
Для каждого экземпляра SQL Server члены предопределенной роли сервера sysadmin могут включать или отключать использование нерегламентированных имен соединителей для поставщика OLE DB с помощью свойства SQL ServerDisallowAdhocAccess. Если нерегламентированный доступ включен, любой пользователь, зарегистрированный на данном экземпляре, может выполнять инструкции SQL, содержащие имена нерегламентированных соединителей, обращающиеся к любым источникам данных в сети, доступ к которым возможен посредством данного поставщика OLE DB. Для управления доступом к источникам данных члены роли sysadmin могут отключить нерегламентированный доступ к определенному поставщику OLE DB, ограничивая таким образом пользователей доступом лишь к тем источникам данных, обращение к которым производится по именам связанных серверов, определенным администраторами. По умолчанию нерегламентированный доступ включен для поставщика OLE DB SQL Server и отключен для всех остальных поставщиков OLE DB.
Распределенные запросы могут давать пользователям доступ к другому источнику данных (например, файлам, нереляционным источникам данных типа службы Active Directory и т. д.) с помощью контекста безопасности учетной записи Microsoft, под которой запущена служба SQL Server. Служба SQL Server может правильно олицетворять имена входа Windows, однако для имен входа SQL Server это невозможно. Это потенциально может открыть пользователю распределенного запроса доступ к другому источнику данных, для которого у него нет разрешения, но у учетной записи, под которой запущена служба SQL Server, такое разрешение есть. Для указания конкретных имен входа, которым будет разрешен доступ к соответствующему связанному серверу, используется процедура sp_addlinkedsrvlogin. Для нерегламентированных имен такой контроль недоступен, поэтому следует проявлять осторожность при включении нерегламентированного доступа к поставщику OLE DB.
При возможности SQL Server принудительно отправляет реляционные операции — соединения, ограничения, проекции, сортировки и группировки по операциям — к источнику данных OLE DB. По умолчанию SQL Server не просматривает базовую таблицу и не выполняет реляционных операций самостоятельно. SQL Server запрашивает поставщика OLE DB, чтобы определить уровень поддерживаемой им грамматики SQL, и на основе этих данных направляет поставщику максимально возможное число реляционных операций. Дополнительные сведения см. в разделе Требования к диалекту SQL для поставщиков OLE DB.
SQL Server указывает поставщику OLE DB механизм возвращения статистики распределения ключевых значений в пределах источника данных OLE DB. Это позволяет оптимизатору запросов SQL Server лучше анализировать закономерность в соответствии данных из источника данных требованиям каждой инструкции SQL, что увеличивает способность оптимизатора создавать оптимальные планы выполнения. Дополнительные сведения см. в разделе Требования к статистике распределения для поставщиков OLE DB.