Autenticação de SQL Server por meio de SOAP

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

Para XML Web Services nativos de SQL Server, a segurança pode ser gerenciada por meio de qualquer um dos seguintes tipos de entidades de segurança:

  • Contas de usuário ou de grupo (ou ambos) do Windows.

  • Logons de SQL Server.

Quando contas do Windows são usadas para a autenticação de pontos de extremidade HTTP, não são necessários cabeçalhos de autenticação SOAP adicionais. Para obter mais informações sobre a autenticação de pontos de extremidade HTTP, consulte Tipos de autenticação de ponto de extremidade e Permissões de ponto de extremidade GRANT (Transact-SQL).

No entanto, quando são usados logons de SQL Server, o aplicativo cliente deve implementar adicionalmente cabeçalhos de WS-Security (Web Services Security) para que a autenticação SOAP inclua e envie informações de logon de SQL Server ao servidor.

Para a autenticação SOAP de logons de SQL Server, qualquer tipo de autenticação HTTP pode ser usado. Além disso, a conta de usuário usada para autenticar na camada HTTP só necessita do acesso do Windows ao servidor local e não necessariamente de um logon de SQL Server.

ObservaçãoObservação

Para a autenticação baseada em SQL Server por meio do SOAP, a opção LOGIN_TYPE do ponto de extremidade deve ser configurada para o modo misto (LOGIN_TYPE=MIXED). A operação de um ponto de extremidade em modo misto requer também que o ponto de extremidade seja configurado para fornecer serviços por meio de um canal SSL (Secure Sockets Layer). Para obter mais informações, consulte CREATE ENDPOINT (Transact-SQL).

Usando cabeçalhos de WS-Security para autenticar um logon de SQL Server (somente no modo misto)

WS-Security é uma especificação proposta para estender a estrutura de mensagens SOAP que ajuda a proteger os serviços Web. WS-Security pode ser usado, quando necessário, para fornecer um mecanismo de autenticação no qual é possível passar diretamente credenciais e tokens entre clientes SOAP e a instância de SQL Server dentro da mensagem SOAP, ampliando sua estrutura.

Se as seguintes condições se aplicarem, você poderá usar os cabeçalhos de WS-Security para fornecer informações de usuário e senha deSQL Server como parte do aplicativo cliente SOAP:

  • A instância de SQL Server foi instalada no modo misto. Isso significa que há suporte para tanto para logons de Windows como de SQL Server.

  • O ponto de extremidade tem as seguintes configurações:

    • LOGIN_TYPE = MIXED.

    • PORTS=(SSL), uma porta de tipo SSL foi especificada.

  • Foram concedidas permissões de ponto de extremidade a usuários que não fazem parte do logon de Windows, como logons de SQL Server.

Quando uma solicitação SOAP contém um cabeçalho de WS-Security, as credenciais do cabeçalho substituem as credenciais usadas na execução da autenticação baseada em HTTP para o ponto de extremidade.

Usando o cabeçalho de WS-Security na autenticação de SQL Server

O cabeçalho de WS-Security pode ser usado em solicitações SOAP enviadas a uma instância de SQL Server para permitir:

  • O transporte de credenciais de autorização de SQL Server (SQL-Auth).

  • O controle de uma senha de SQL Server expirada.

Transportando credenciais SQL-Auth

O exemplo a seguir mostra como o cabeçalho de WS-Security pode ser usado em uma solicitação SOAP a uma instância de SQL Server para transportar credenciais de autorização 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>

Nesse exemplo, o elemento <wsse:UserNameToken> é usado para conter os dois seguintes subelementos:

  • O elemento <wsse:Username> que inclui o nome de usuário de SQL Server.

  • O elemento <wsse:Password> que tem seu atributo opcional Type definido como "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText".Ele é usado para conter o texto da senha do usuário.

ObservaçãoObservação

Quando o modo misto é suportado para SQL Server e o ponto de extremidade HTTP SOAP, é necessária uma porta SSL para fornecer pelo menos uma criptografia nominal das credenciais do usuário.

Controlando uma senha de SQL Server expirada

O SQL Server fornece o recurso de expiração de senhas. Quando, durante uma tentativa de logon, um servidor determina que a senha do usuário expirou, o recurso de senhas exige que o cliente informe a senha antiga de usuário e a nova senha para concluir o processo de logon com êxito.

Para atualizar o cliente a fim de dar suporte a esse recurso, você pode concluir esse processo usando o cabeçalho de WS-Security a seguir como exemplo de modelo.

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

Também é possível alterar uma senha como parte de uma sessão SOAP. A solicitação de alteração da senha só entrará em vigor depois que uma nova sessão for iniciada.

Por exemplo, para alterar a senha como parte de uma nova sessão SOAP, adicione o seguinte à seção <SOAP-ENV:Header>:

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

Para obter mais informações, consulte Trabalhando com sessões SOAP.

Além disso, o elemento <wsse:UserNameToken> foi ligeiramente modificado para conter o três subelementos seguintes, diferindo um pouco do exemplo anterior sobre o envio de credenciais de usuário:

  • O elemento <wsse:Username> que inclui o nome de usuário de SQL Server.

  • O elemento <wsse:Password> que tem seu atributo opcional Type definido como "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText". Isso é usado para conter o texto da nova senha de usuário.

  • O elemento <sql:OldPassword> que tem seu atributo opcional Type definido como "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"". Isso é usado para conter o texto da senha antiga de usuário.

Esquema XML de cabeçalho de WS-Security

A seguir, é mostrado um fragmento de esquema do cabeçalho de WS-Security para implementação apenas no 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>