Authentification SQL Server sur SOAP

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é.

Pour les services Web XML natifs de SQL Server, la sécurité peut être gérée à l'aide de l'un des types d'entités de sécurité suivants :

  • des comptes d'utilisateur et/ou de groupes Windows ;

  • des connexions SQL Server

Lorsque des comptes Windows sont utilisés pour l'authentification des points de terminaison HTTP, des en-têtes d'authentification SOAP supplémentaires ne sont pas requis. Pour plus d'informations sur l'authentification des points de terminaison HTTP, consultez Types d'authentification du point de terminaison et GRANT – octroi d'autorisations de point de terminaison (Transact-SQL).

Toutefois, lorsque des connexions SQL Server sont utilisées, l'application cliente doit en outre implémenter des en-têtes WS-Security (Web Services Security) pour l'authentification SOAP afin d'inclure des informations de connexion SQL Server et de les soumettre au serveur.

Pour l'authentification SOAP des connexions SQL Server, n'importe quel type d'authentification HTTP peut être utilisé. En outre, le compte d'utilisateur utilisé pour l'authentification au niveau de la couche HTTP requiert uniquement un accès Windows au serveur local et n'a pas nécessairement besoin d'une connexion SQL Server.

Notes

Pour une authentification sur SOAP basée sur SQL Server, l'option LOGIN_TYPE du point de terminaison doit être configurée sur le mode mixte (LOGIN_TYPE=MIXED). En outre, l'exploitation d'un point de terminaison en mode mixte requiert que le point de terminaison soit configuré de manière à fournir un service via un canal SSL (Secure Sockets Layer). Pour plus d'informations, consultez CREATE ENDPOINT (Transact-SQL).

Utilisation d'en-têtes WS-Security pour authentifier une connexion SQL Server (mode mixte uniquement)

WS-Security est une spécification proposée dans le but d'étendre la structure des messages SOAP afin de faciliter la protection des services Web. WS-Security permet, aussi souvent que nécessaire, de fournir un mécanisme d'authentification là où les informations d'identification et les jetons sont transmissibles entre les clients SOAP et l'instance de SQL Server directement à l'intérieur du message SOAP, en étendant la structure de celui-ci.

Si les conditions suivantes sont réunies, vous pouvez utiliser des en-têtes WS-Security pour fournir les informations d'utilisateur et de mot de passe SQL Server dans le cadre de votre application cliente SOAP :

  • L'instance de SQL Server a été installée en mode mixte. Cela signifie que les connexions Windows et SQL Server sont prises en charge.

  • Le point de terminaison présente les paramètres suivants :

    • LOGIN_TYPE = MIXED.

    • PORTS=(SSL), un port de type SSL a été spécifié.

  • Les autorisations de points de terminaison ont été accordées à des utilisateurs qui ne sont pas associés à la connexion Windows, telle que les connexions SQL Server.

Si une demande SOAP contient un en-tête WS-Security, les informations d'identification figurant dans l'en-tête remplacent celles qui ont été utilisées lorsque l'authentification HTTP a été effectuée pour le point de terminaison.

Utilisation de l'en-tête WS-Security pour l'authentification SQL Server

L'en-tête WS-Security peut être utilisé dans les demandes SOAP envoyées à une instance de SQL Server pour prendre en charge les opérations suivantes :

  • transport des informations d'identification (authentification SQL) pour l'autorisation SQL Server ;

  • gestion d'un mot de passe SQL Server expiré.

Transport des informations d'identification d'authentification SQL

L'exemple ci-dessous montre comment l'en-tête WS-Security permet, dans une demande SOAP destinée à une instance de SQL Server, de transporter les informations d'identification (authentification SQL) pour l'autorisation SQL Server.

<SOAP-ENV:Header>
            <wsse:Security  xmlns:wsse=
                        "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <wsse:UsernameToken>
                        <wsse:Username>JohnDoe</wsse:Username>
            <wsse:Password Type=
                        "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">pass-word1</wsse:Password>
            </wsse:UsernameToken>
            </wsse:Security>
</SOAP-ENV:Header>

Dans cet exemple, l'élément <wsse:UserNameToken> contient les deux sous-éléments suivants :

  • Élément <wsse:Username> qui possède le nom d'utilisateur SQL Server.

  • Élément <wsse:Password> dont l'attribut Type facultatif a pour valeur "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText". Il contient le texte du mot de passe de l'utilisateur.

Notes

Lorsque le mode mixte est pris en charge pour SQL Server et le point de terminaison SOAP HTTP, un port SSL est requis pour fournir au moins un chiffrement nominal des informations d'identification de l'utilisateur.

Gestion d'un mot de passe SQL Server expiré

SQL Server fournit la fonctionnalité d'expiration de mot de passe. Lorsqu'un serveur détermine pendant une tentative de connexion que le mot de passe de l'utilisateur a expiré, la fonctionnalité de mot de passe requiert que le client réponde avec l'ancien mot de passe de l'utilisateur et le nouveau mot de passe pour terminer correctement le processus de connexion.

Pour mettre à jour le client afin qu'il prenne en charge cette fonctionnalité, vous pouvez recourir à l'en-tête WS-Security comme exemple de modèle.

<SOAP-ENV:Header>
 <wsse:Security  xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <wsse:UsernameToken>
                        <wsse:Username>JohnDoe</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">pass-word2</wsse:Password>
            <sql:OldPassword Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText" xmlns:sql="https://schemas.microsoft.com/sqlserver/2004/SOAP">pass-word1</sql:OldPassword>
            </wsse:UsernameToken>
 </wsse:Security>
</SOAP-ENV:Header>

La modification d'un mot de passe peut également être réalisée dans le cadre d'une session SOAP. La demande de modification du mot de passe n'est honorée que lorsqu'une nouvelle session est initiée.

Par exemple, pour modifier le mot de passe dans le cadre d'une nouvelle session SOAP, ajoutez le code suivant à la section <SOAP-ENV:Header> :

<sqloptions:sqlSession xmlns:sqloptions="https://schemas.microsoft.com/sqlserver/2004/SOAP/Options" initiate="true"/>

Pour plus d'informations, consultez Utilisation de sessions SOAP.

En outre, l'élément <wsse:UserNameToken> est légèrement modifié pour qu'il contienne les trois sous-éléments suivants, avec des différences mineures par rapport à l'exemple précédent, pour l'envoi des informations d'identification utilisateur :

  • Élément <wsse:Username> qui possède le nom d'utilisateur SQL Server.

  • Élément <wsse:Password> dont l'attribut Type facultatif a pour valeur "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText" Il contient le texte du nouveau mot de passe de l'utilisateur.

  • Élément <sql:OldPassword> dont l'attribut Type facultatif a pour valeur "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText". Il contient le texte de l'ancien mot de passe de l'utilisateur.

Schéma XML de l'en-tête WS-Security

Les informations ci-dessous représentent un fragment de schéma de l'en-tête WS-Security en vue d'une implémentation dans SQL Server uniquement.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="https://schemas.microsoft.com/sqlserver/2004/SOAP" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
  <xsd:import namespace="https://schemas.microsoft.com/sqlserver/2004/SOAP" />
  <xsd:annotation>
    <xsd:documentation xml:lang="en">(c) Copyright 2004, Microsoft Corporation The following schema for Microsoft SQL Server is presented in XML format and is for informational purposes only. Microsoft Corporation ("Microsoft") may have trademarks, copyrights, or other intellectual property rights covering subject matter in the schema. Microsoft does not make any representation or warranty regarding the schema or any product or item developed based on the schema. The schema is provided to you on an AS IS basis. Microsoft disclaims all express, implied and statutory warranties, including but not limited to the implied warranties of merchantability, fitness for a particular purpose, and freedom from infringement. Without limiting the generality of the foregoing, Microsoft does not make any warranty of any kind that any item developed based on the schema, or any portion of the schema, will not infringe any copyright, patent, trade secret, or other intellectual property right of any person or entity in any country. It is your responsibility to seek licenses for such intellectual property rights where appropriate. MICROSOFT SHALL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SCHEMA, INCLUDING WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL (INCLUDING ANY LOST PROFITS), PUNITIVE OR SPECIAL DAMAGES, WHETHER OR NOT MICROSOFT HAS BEEN ADVISED OF SUCH DAMAGES.</xsd:documentation> 
  </xsd:annotation>
  <xsd:element name="Security">
    <xsd:complexType>
      <xsd:sequence minOccurs="1" maxOccurs="1">
        <xsd:element name="UsernameToken">
          <xsd:complexType>
            <xsd:sequence minOccurs="1" maxOccurs="1">
              <xsd:element name="Username" type="xsd:string" />
              <xsd:element name="Password">
                <xsd:complexType>
                  <xsd:simpleContent>
                    <xsd:extension base="xsd:string">
                      <xsd:attribute name="Type" type="xsd:anyURI" />
                    </xsd:extension>
                  </xsd:simpleContent>
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="OldPassword" type="sql:OldPassword" minOccurs="0" />
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="https://schemas.microsoft.com/sqlserver/2004/SOAP" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="https://schemas.microsoft.com/sqlserver/2004/SOAP">
  <xsd:annotation>
    <xsd:documentation xml:lang="en">(c) Copyright 2004, Microsoft Corporation The following schema for Microsoft SQL Server is presented in XML format and is for informational purposes only. Microsoft Corporation ("Microsoft") may have trademarks, copyrights, or other intellectual property rights covering subject matter in the schema. Microsoft does not make any representation or warranty regarding the schema or any product or item developed based on the schema. The schema is provided to you on an AS IS basis. Microsoft disclaims all express, implied and statutory warranties, including but not limited to the implied warranties of merchantability, fitness for a particular purpose, and freedom from infringement. Without limiting the generality of the foregoing, Microsoft does not make any warranty of any kind that any item developed based on the schema, or any portion of the schema, will not infringe any copyright, patent, trade secret, or other intellectual property right of any person or entity in any country. It is your responsibility to seek licenses for such intellectual property rights where appropriate. MICROSOFT SHALL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SCHEMA, INCLUDING WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL (INCLUDING ANY LOST PROFITS), PUNITIVE OR SPECIAL DAMAGES, WHETHER OR NOT MICROSOFT HAS BEEN ADVISED OF SUCH DAMAGES.</xsd:documentation> 
  </xsd:annotation>
  <xsd:complexType name="OldPassword">
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="Type" type="xsd:anyURI" />
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
</xsd:schema>