Architecture des requêtes distribuées

Microsoft SQL Server prend en charge deux méthodes distinctes pour référencer des sources de données OLE DB hétérogènes dans les instructions Transact-SQL :

  • Noms de serveurs liés

    Les procédures stockées système sp_addlinkedserver et sp_addlinkedsrvlogin servent à donner un nom de serveur à une source de données OLE DB. Les objets inclus dans ces serveurs liés peuvent être référencés dans des instructions Transact-SQL en utilisant un nom en quatre parties. Par exemple, si le nom d'un serveur lié DeptSQLSrvr est défini par rapport à une autre instance de SQL Server, l'instruction suivante fait référence à une table de ce serveur :

    SELECT JobTitle, HireDate 
       FROM DeptSQLSrvr.AdventureWorks2008R2.HumanResources.Employee;
    

    Le nom de serveur lié peut également être spécifié dans une instruction OPENQUERY afin d'ouvrir un ensemble de lignes à partir d'une source de données OLE DB. Cet ensemble de lignes peut ensuite être référencé en tant que table dans les instructions Transact-SQL.

  • Noms de connecteurs appropriés

    Dans le cas de références rares à un serveur lié, la fonction OPENROWSET ou OPENDATASOURCE est spécifiée avec les informations nécessaires à la connexion au serveur lié. Il est donc possible de faire référence à l'ensemble de lignes comme à une table dans les instructions Transact-SQL :

    SELECT *
    FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
            'c:\MSOffice\Access\Samples\Northwind.mdb';'Admin';'';
            Employees);
    

SQL Server utilise OLE DB pour la communication entre le moteur relationnel et le moteur de stockage. Le moteur relationnel décompose chaque instruction Transact-SQL en une série d'opérations sur des ensembles de lignes OLE DB simples ouverts par le moteur de stockage à partir des tables de base. En d'autres termes, le moteur relationnel peut également ouvrir des ensembles de lignes OLE DB simples dans n'importe quelle source de données OLE DB.

Moteur relationnel, couche OLE DB, moteur de stockage

Le moteur relationnel utilise l'API OLE DB pour ouvrir les ensembles de lignes sur les serveurs liés, pour extraire les lignes et pour gérer les transactions.

Pour chaque source de données OLE DB à laquelle vous accédez en tant que serveur lié, un fournisseur OLE DB doit être présent sur le serveur exécutant SQL Server. L'ensemble d'opérations Transact-SQL qui peut être utilisé sur une source de données OLE DB spécifique dépend des capacités du fournisseur OLE DB. Pour plus d'informations, consultez Éléments de référence du fournisseur OLE DB pour les requêtes distribuées.

Pour chaque instance de SQL Server, les membres du rôle serveur fixe sysadmin peuvent activer ou désactiver l'utilisation de noms de connecteurs appropriés pour un fournisseur OLE DB à l'aide de la propriété SQL ServerDisallowAdhocAccess. Si l'accès approprié est activé, tout utilisateur connecté à l'instance peut exécuter des instructions SQL contenant des noms de connecteurs appropriés, en faisant référence à n'importe quelle source de données sur le réseau accessible par le biais du fournisseur OLE DB. Pour contrôler l'accès aux sources de données, les membres du rôle sysadmin peuvent désactiver l'accès approprié de ce fournisseur OLE DB, limitant ainsi l'accès des utilisateurs aux sources de données référencées par le nom des serveurs liés définis par les administrateurs. Par défaut, ce type d'accès approprié est activé pour le fournisseur OLE DB pour SQL Server, mais désactivé pour tous les autres fournisseurs OLE DB.

Les requêtes distribuées permettent aux utilisateurs d'accéder à une autre source de données (par exemple, des fichiers, des sources de données non relationnelles telles que Active Directory, etc.) par le biais du contexte de sécurité du compte Microsoft Windows sous lequel le service SQL Server s'exécute. SQL Server emprunte l'identité de la connexion appropriée aux connexions Windows ; cet emprunt ne peut cependant pas être effectué pour les connexions SQL Server. Ceci permet d'autoriser éventuellement l'utilisateur d'une requête distribuée à accéder à une autre source de données pour laquelle il ne bénéficie pas de droits d'accès, mais où le compte sous lequel le service SQL Server s'exécute dispose des autorisations appropriées. Utilisez la procédure stockée sp_addlinkedsrvlogin afin de définir les connexions spécifiques autorisées à accéder au serveur lié correspondant. Ce type de contrôle n'est pas ouvert aux noms appropriés. Il est donc impératif d'activer un fournisseur OLE DB pour un accès approprié avec précaution.

Lorsque c'est possible, SQL Server envoie les opérations relationnelles telles que les jointures, les restrictions, les projections, les tris ou les regroupements à la source de données OLE DB. SQL Server n'analyse pas par défaut la table de base dans SQL Server et n'assure pas les opérations relationnelles de son propre chef. SQL Server interroge le fournisseur OLE DB afin de déterminer le niveau de grammaire SQL et, en fonction de ces informations, envoie autant d'opérations relationnelles que possible au fournisseur. Pour plus d'informations, consultez Conditions associées aux dialectes SQL pour les fournisseurs OLE DB.

SQL Server spécifie un mécanisme permettant à un fournisseur OLE DB de renvoyer des statistiques indiquant comment les valeurs clés sont distribuées dans la source de données OLE DB. Cela permet à l'optimiseur de requête SQL Server de mieux analyser le modèle de données dans la source de données par rapport aux exigences spécifiques à chaque instruction SQL, augmentant ainsi sa capacité à générer des plans d'exécution optimaux. Pour plus d'informations, consultez Conditions associées aux statistiques de distribution pour les fournisseurs OLE DB.