Accès aux données externes

Pour accéder aux données d'une source de données OLE DB, vous devez fournir à SQL Server les informations suivantes :

  • Le nom du fournisseur OLE DB présentant la source de données.

  • L'ensemble des informations nécessaires au fournisseur OLE DB pour localiser la source de données.

  • Le nom d'un objet que la source de données OLE DB peut présenter sous la forme d'un ensemble de lignes, ou une requête pouvant être envoyée au fournisseur OLE DB et qui amènera la source de données à présenter un ensemble de lignes. Les objets qui peuvent être présentés sous forme d'ensembles de lignes sont connus sous le nom de tables distantes. Les requêtes qui génèrent des ensembles de lignes sont des requêtes directes.

  • Vous pouvez également fournir à SQL Server une identification de connexion valide pour la source de données OLE DB (facultatif).

SQL Server prend en charge les références à des sources de données OLE DB hétérogènes dans les instructions Transact-SQL à l'aide du nom du serveur lié ou du nom de l'ordinateur approprié.

Noms de serveurs liés

Un serveur lié est un serveur virtuel qui a été défini pour SQL Server avec toutes les informations permettant d'accéder à une source de données OLE DB. Un nom de serveur lié est défini à l'aide de la procédure stockée système sp_addlinkedserver. La définition du serveur lié contient toutes les informations permettant de localiser la source de données OLE DB. Les connexions locales d'accès à SQL Server sont mappées aux connexions du serveur lié à l'aide de sp_addlinkedsrvlogin.

Les tables distantes peuvent être référencées à l'aide du nom du serveur lié sous l'une des formes suivantes :

  • Nom de serveur dans le nom en quatre parties d'une référence de vue ou de table dans une instruction Transact-SQL. Les trois autres éléments de ce nom font référence à un objet du serveur lié qui est présenté sous forme d'ensemble de lignes.

  • Paramètre d'entrée à une fonction OPENQUERY. OPENQUERY envoie au fournisseur OLE DB une commande à exécuter. L'ensemble de lignes renvoyé peut ensuite être utilisé comme une référence de table ou de vue dans une instruction Transact-SQL.

Pour plus d'informations, consultez Identification d'une source de données à l'aide d'un nom de serveur lié.

Noms appropriés

Les noms appropriés sont utilisés pour les requêtes peu fréquentes impliquant des sources de données OLE DB qui ne sont pas définies en tant que serveurs liés. Dans SQL Server, les fonctions OPENROWSET et OPENDATASOURCE fournissent des informations de connexion pour l'accès aux données à partir de sources de données OLE DB.

Par défaut, les noms appropriés ne sont pas pris en charge. L'option de fournisseur DisallowAdhocAccess doit avoir pour valeur 0 et l'option de configuration avancée Requêtes distribuées appropriées doit être activée.

Remarque relative à la sécuritéRemarque relative à la sécurité

L'activation de l'utilisation de noms appropriés signifie que toute connexion authentifiée à SQL Server peut accéder au fournisseur. Les administrateurs de SQL Server ne doivent activer cette fonctionnalité que pour les fournisseurs hautement approuvés, accessibles en toute sécurité par n'importe quelle connexion locale.

OPENROWSET et OPENDATASOURCE doivent être utilisés uniquement pour faire référence à des sources de données OLE DB faisant l'objet d'accès peu fréquents. Pour les sources de données faisant l'objet d'accès plus fréquents, définissez un serveur lié. OPENDATASOURCE et OPENROWSET ne fournissent pas toutes les fonctionnalités des définitions de serveur lié, notamment la gestion de la sécurité et la consultation des informations de catalogue. Chaque fois que ces fonctions sont appelées, toutes les informations de connexion, notamment les mots de passe, doivent être fournies.

OPENROWSET et OPENDATASOURCE semblent être des fonctions et, pour des raisons pratiques, sont désignées en tant que telles ; toutefois, OPENROWSET et OPENDATASOURCE sont des macros et ne prennent pas en charge la transmission de variables Transact-SQL comme arguments.

OPENROWSET peut être utilisée avec n'importe quel fournisseur OLE DB qui renvoie un ensemble de lignes, et peut être employée à n'importe endroit où une référence de table ou de vue est employée dans une instruction Transact-SQL. OPENROWSET est spécifiée avec :

  • toutes les informations permettant de se connecter à la source de données OLE DB ;

  • le nom d'un objet qui générera un ensemble de lignes, ou une requête qui produira un ensemble de lignes.

OPENDATASOURCE fournit des informations de connexion dans un nom d'objet en quatre parties. Cette fonction prend uniquement en charge les fournisseurs OLE DB qui exposent plusieurs ensembles de lignes en utilisant la notation catalog**.schema.**object. Dans la syntaxe Transact-SQL, OPENDATASOURCE peut être employée dans le même emplacement qu'un nom de serveur lié. OPENDATASOURCE est spécifiée avec :

  • le nom enregistré comme PROGID du fournisseur OLE DB utilisé pour accéder à la source de données ;

  • une chaîne de connexion qui spécifie les diverses propriétés de connexion à transmettre au fournisseur OLE DB. La syntaxe de la chaîne de connexion est une séquence de paires de valeurs de mots clés. La syntaxe de base est définie dans le kit de développement logiciel (SDK) de Microsoft Data Access, et chaque fournisseur documente la paire de valeurs de mots clés qu'il prend en charge. Pour plus d'informations sur les chaînes de connexion, consultez OPENDATASOURCE (Transact-SQL).

Pour plus d'informations, consultez Identification d'une source de données à l'aide d'un nom approprié.

Accès aux serveurs liés

Après la création d'un serveur lié au moyen de sp_addlinkedserver, il est accessible à l'aide :

  • de requêtes distribuées qui accèdent aux tables dans le serveur lié par l'intermédiaire d'instructions SELECT, INSERT, UPDATE et DELETE en utilisant un nom basé sur un serveur lié ;

  • de procédures stockées distantes exécutées sur le serveur lié en utilisant un nom en quatre parties ;

  • d'une instruction EXECUTE qui accepte une commande directe paramétrée arbitraire, par le biais de l'extension AT linked_server_name. Cette commande comprend des commandes ou des instructions DDL (Data Definition Language) et DML (Data Manipulation Language) qui renvoient plusieurs résultats. Pour plus d'informations, consultez Utilisation de requêtes directes comme des tables.

La procédure stockée sp_addserver est conservée à des fins de compatibilité pour les applications existantes, mais elle ne sera pas prise en charge dans les versions futures. Étant donné que les applications sont transférées vers SQL Server 2008, il est possible que, pendant quelque temps, elles doivent être exécutées avec un nouveau code utilisant des requêtes distribuées lancées sur la définition de serveur lié ainsi qu'avec un code existant utilisant une définition de serveur distant. Les serveurs liés et les serveurs distants utilisent le même espace de noms. Par conséquent, la définition de serveur lié ou la définition de serveur distant doit utiliser un nom diffèrent du nom réseau du serveur accessible à distance. Définissez une des entrées avec un nom de serveur différent et utilisez sp_setnetname pour associer cette définition au nom réseau du serveur distant.