Réservation d'un espace de noms HTTP

Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

La réservation d'un espace de noms HTTP à utiliser avec une instance de SQL Server est réalisable à l'aide d'une réservation implicite, comme lorsque vous utilisez CREATE ENDPOINT, ou à l'aide d'une réservation explicite en utilisant la procédure stockée sp_reserve_http_namespace.

Les espaces de noms URL sont réservés pour les raisons suivantes :

  • Si une application est exécutée sur un compte non administrateur, elle ne peut pas se lier à l'espace de noms à l'exécution si un administrateur ne le réserve pas. Il s'agit d'un impératif du pilote HTTP en mode noyau (Http.sys).

    La seule exception à cette règle concerne le cas où l'application est exécutée sur un compte système local. Les applications exécutées sur le compte système local peuvent se lier à un espace de noms quelconque tant que ce dernier est libre. Même lors d'une exécution sur le compte système local, il est conseillé de réserver les espaces de noms pour les raisons ci-dessous.

  • La réservation d'un espace de nom garantit que les autres applications ne peuvent pas s'y lier ; par conséquent, l'application est seule propriétaire de l'espace de noms.

    Par exemple, si une instance de SQL Server est exécutée sur le compte système local, la réservation d'espaces de noms n'est pas nécessaire, mais elle est néanmoins conseillée pour éviter des conflits entre applications sur les adresses URL.

La réservation des espaces de noms est hiérarchique. Par exemple, si l'espace de noms http://adventure-works.com:80/ est réservé, les sous-espaces de noms tels que http://adventure-works.com:80/sqlapp1 et http://adventure-works.com:80/sqlapp2/dir1 le sont également.

Notes

Pour réserver un espace de noms HTTP en utilisant le pilote HTTP en mode noyau (Http.sys), il est nécessaire de détenir des privilèges d'administration Windows sur l'ordinateur local sur lequel l'instance de SQL Server est installée.

Création d'une réservation explicite

Pour créer une réservation explicite, si un administrateur souhaite que les utilisateurs puissent exécuter une instruction DLL sur un point de terminaison sans recourir à des privilèges élevés sur l'ordinateur, il peut réserver un espace de noms URL à l'aide de la procédure stockée sp_reserve_http_namespace.

Par exemple, vous pouvez vous connecter à une instance de SQL Server à l'aide de l'authentification Windows, qui est une connexion disposant des privilèges d'administrateur, et exécuter la procédure stockée suivante :

sp_reserve_http_namespace N'http://MyServer:80/sql'
GO

La procédure stockée réserve explicitement l'espace de nom spécifié, où MyServer représente le nom du serveur et 80 le numéro du port. Cette procédure réserve l'espace de noms URL spécifié, de telle manière que les opérations DDL ultérieures dans cet espace de noms ne nécessitent pas de privilège d'administrateur sur l'ordinateur. Un utilisateur sans privilège d'administrateur sur l'ordinateur peut exécuter l'instruction DDL sur un point de terminaison.

Par exemple, un utilisateur peut exécuter l'instruction CREATE ENDPOINT suivante :

CREATE ENDPOINT sql_endpoint 
STATE = STARTED
AS HTTP(
   PATH = '/sql/AdvWorks', 
   AUTHENTICATION = (INTEGRATED ), 
   PORTS = ( CLEAR ), 
   SITE = 'MyServer'
)
FOR SOAP (
    ...
)
GO

L'instruction sur le point de terminaison inscrit simplement /sql/AdvWorks dans l'espace de noms réservé de HTTP.SYS. Une application cliente peut alors envoyer une demande SOAP, par exemple en demandant une réponse WSDL du serveur, au point de terminaison :

http://MyServer/sql/AdvWorks?wsdl

Le nom de l'espace de noms spécifié dans la procédure stockée sp_reserve_http_namespace doit prendre la forme suivante :

<scheme>://<hostpart>[:<port>]/<RelativeURI>
  • scheme
    Peut être http ou https.

  • hostpart
    Peut être un nom d'hôte spécifique ou les caractères génériques suivants : signe plus (+) ou astérisque (*).

    Le signe plus (+) implique une opération de réservation qui s'applique à l'ensemble des noms d'hôte possibles de l'ordinateur pour la <combinaison> et le <port> spécifiés.

    L'astérisque (*) précise que l'opération de réservation s'applique à tous les noms d'hôte possibles pour l'ordinateur et pour le schéma <scheme> et le <port> spécifiés qui ne sont pas explicitement réservés d'une autre manière, par exemple par l'exécution d'autres opérations sp_reserve_http_namespace, d'autres points de terminaison actifs ou d'autres applications.

Identification de l'espace de noms d'un point de terminaison

Vous pouvez identifier l'espace de noms adéquat d'un point de terminaison en fonction des paramètres de l'instruction CREATE ENDPOINT.

La valeur du paramètre PORTS de l'instruction CREATE ENDPOINT détermine le schéma de l'espace de noms, comme le montre le tableau suivant :

Valeur du point de terminaison

Valeur du <schéma>

CLEAR

http

SSL

https

n

http

La valeur du paramètre CLEAR_PORT ou SSL_PORT définit la valeur de <port> de l'espace de noms.

La valeur du paramètre PATH définit l'<URI relatif> de l'espace de noms.

La valeur du paramètre PATH définit la <partie hôte> de l'espace de noms.

Par exemple, l'instruction suivante crée un point de terminaison possédant l'espace de noms http://testhost:80/sqlurl/myapp.

CREATE ENDPOINT ext_endpoint
    STATE = STARTED
AS HTTP (       
PATH = '/sqlurl/myapp'
, PORTS = CLEAR
, SITE = testhost
, CLEAR_PORT = 80 
)

L'instruction suivante crée un point de terminaison possédant l'espace de noms https://*:443/sqlurl/myapp :

CREATE ENDPOINT ext_endpoint
    STATE = STARTED
AS HTTP (       
PATH = '/sqlurl/myapp'
, PORTS = SSL
, SITE = '*'
, SSL_PORT = 443 
)

Exemples

Dans l'exemple ci-dessous, l'administrateur réserve un espace de noms dans HTTP.SYS pour la connexion SSL. Par conséquent, un utilisateur peut créer des points de terminaison où PORT a la valeur SSL.

sp_reserve_http_namespace N'https://MyServer:443/sql'