Autenticación de SQL Server por medio de SOAP

Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

Para servicios web XML nativos de SQL Server, la seguridad se puede administrar mediante el uso de cualquiera de los siguientes tipos de entidades de seguridad:

  • Cuentas de usuario o de grupo (o ambos) de Windows.

  • Inicios de sesión de SQL Server.

Cuando se utilizan cuentas de Windows para la autenticación de extremos HTTP, no se requieren encabezados de autenticación SOAP adicionales. Para obtener más información acerca de la autenticación de extremos HTTP, vea Tipos de autenticación de extremos y GRANT (permisos de extremo de Transact-SQL).

Sin embargo, cuando se utilizan inicios de sesión de SQL Server, la aplicación cliente debe implementar adicionalmente encabezados de Web Services Security (WS-Security) para que la autenticación SOAP incluya y envíe información de inicio de sesión de SQL Server al servidor.

Para la autenticación SOAP de inicios de sesión de SQL Server se puede utilizar cualquier tipo de autenticación HTTP. Además, la cuenta de usuario que se utilice para autenticar en la capa HTTP sólo requiere acceso de Windows al servidor local y no requiere necesariamente un inicio de sesión de SQL Server.

[!NOTA]

Para la autenticación basada en SQL Server por medio de SOAP, se debe configurar la opción LOGIN_TYPE del extremo en modo mixto (LOGIN_TYPE=MIXED). El funcionamiento de un extremo en modo mixto requiere también configurar el extremo para proporcionar servicio por un canal SSL (Capa de sockets seguros). Para obtener más información, vea CREATE ENDPOINT (Transact-SQL).

Usar encabezados de WS-Security para autenticar un inicio de sesión de SQL Server (sólo modo mixto)

WS-Security es una especificación propuesta para extender la estructura de mensajes SOAP y ayudar a proteger los servicios web. WS-Security se puede utilizar cuando sea necesario para proporcionar un mecanismo de autenticación en el que se puedan pasar directamente credenciales y tokens entre clientes SOAP y la instancia de SQL Server dentro del mensaje SOAP, al ampliar su estructura.

Si se cumplen las siguientes condiciones, se pueden utilizar encabezados de WS-Security para suministrar información de usuario y contraseña de SQL Server como parte de la aplicación cliente SOAP:

  • La instancia de SQL Server se instaló en modo mixto. Esto significa que se admiten tanto inicios de sesión de SQL Server como de Windows.

  • El extremo tiene la siguiente configuración:

    • LOGIN_TYPE = MIXED.

    • PORTS=(SSL), se especificó un puerto de tipo SSL.

  • Se han concedido permisos de extremo a usuarios que no forman parte del inicio de sesión de Windows, como inicios de sesión de SQL Server.

Cuando una solicitud SOAP incluye un encabezado de WS-Security, las credenciales del encabezado reemplazan a las credenciales utilizadas al realizar la autenticación basada en HTTP para el extremo.

Usar el encabezado de WS-Security en autenticación de SQL Server

Se puede utilizar el encabezado de WS-Security en solicitudes SOAP enviadas a una instancia de SQL Server para que admita:

  • Transportar credenciales de autorización de SQL Server (SQL-Auth).

  • Controlar una contraseña de SQL Server caducada.

Transportar credenciales SQL-Auth

En el ejemplo siguiente se muestra cómo puede utilizarse el encabezado de WS-Security en una solicitud SOAP a una instancia de SQL Server para transportar credenciales de autorización de SQL Server (SQL-Auth).

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

En este ejemplo, el elemento <wsse:UserNameToken> se utiliza para contener los dos subelementos siguientes:

  • El elemento <wsse:Username> que incluye el nombre de usuario de SQL Server.

  • El elemento <wsse:Password>, que tiene el atributo opcional Type establecido en un valor de "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText". Se utiliza para contener el texto de la contraseña del usuario

[!NOTA]

Cuando se admite el modo mixto para el extremo HTTP SOAP de SQL Server, se necesita un puerto SSL que proporcione al menos el cifrado nominal de las credenciales del usuario.

Controlar una contraseña de SQL Server caducada

SQL Server proporciona la característica de caducidad de las contraseñas. Cuando, durante un intento de inicio de sesión, un servidor determina que la contraseña del usuario está caducada, la característica de contraseñas requiere que el cliente responda con la contraseña antigua del usuario y la nueva para llevar a cabo correctamente el proceso de registro.

Puede actualizar el cliente a fin de que admita esta característica mediante el siguiente encabezado de WS-Security como ejemplo de plantilla.

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

También se puede realizar el cambio de contraseña como parte de una sesión SOAP. La solicitud de cambio de contraseña sólo se respeta al iniciar una nueva sesión.

Por ejemplo, para cambiar la contraseña como parte de una nueva sesión SOAP, agregue lo siguiente a la sección <SOAP-ENV:Header>:

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

Para obtener más información, vea Trabajar con sesiones SOAP.

Además, se ha modificado ligeramente el elemento <wsse:UserNameToken> para que contenga los tres subelementos siguientes, con diferencias poco importantes con respecto al ejemplo anterior en cuanto a enviar credenciales de usuario:

  • El elemento <wsse:Username> que incluye el nombre de usuario de SQL Server.

  • El elemento <wsse:Password> que tiene el atributo opcional Type establecido en un valor de "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText". Se utiliza para contener el texto de la nueva contraseña del usuario.

  • El elemento <sql:OldPassword> que tiene el atributo opcional Type establecido en un valor de "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"". Se utiliza para contener el texto de la antigua contraseña del usuario.

Esquema XML del encabezado de WS-Security

A continuación se ofrece un fragmento del esquema del encabezado de WS-Security para su implementación sólo en SQL Server.

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