Autenticazione di SQL Server tramite SOAP

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa caratteristica in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Per i servizi Web XML nativi di SQL Server, è possibile gestire la protezione utilizzando uno dei tipi di entità di protezione seguenti:

  • Account di gruppo o utente di Windows o entrambi.

  • Account di accesso di SQL Server.

Quando vengono utilizzati account di Windows per l'autenticazione dell'endpoint HTTP, non sono necessarie ulteriori intestazioni di autenticazione SOAP. Per ulteriori informazioni sull'autenticazione dell'endpoint HTTP, vedere Tipi di autenticazione dell'endpoint e GRANT - autorizzazioni per endpoint (Transact-SQL).

Quando, tuttavia, vengono utilizzati account di accesso di SQL Server, nell'applicazione client è necessario implementare intestazioni WS-Security (Web Services Security) aggiuntive affinché tramite l'autenticazione SOAP sia possibile includere e inviare al server le informazioni di accesso di SQL Server.

Per l'autenticazione SOAP degli account di accesso di SQL Server, è possibile utilizzare qualsiasi tipo di autenticazione HTTP. Per l'account utente utilizzato per l'autenticazione a livello HTTP, è necessario solo l'accesso di Windows al server locale e non è obbligatoria la disponibilità di un account di accesso di SQL Server.

Nota

Per l'autenticazione tramite SOAP basata su SQL Server, l'opzione LOGIN_TYPE dell'endpoint deve essere configurata per la modalità mista (LOGIN_TYPE=MIXED). Per il funzionamento di un endpoint in modalità mista è inoltre necessario che l'endpoint sia configurato per offrire il servizio in un canale SSL (Secure Sockets Layer). Per ulteriori informazioni, vedere CREATE ENDPOINT (Transact-SQL).

Utilizzo di intestazioni WS-Security per l'autenticazione di un account di accesso di SQL Server (solo modalità mista)

WS-Security è una specifica proposta per estendere la struttura dei messaggi SOAP al fine di offrire protezione per i servizi Web. È possibile utilizzare WS-Security per offrire un meccanismo di autenticazione che consenta di passare credenziali e token tra client SOAP e l'istanza di SQL Server direttamente nel messaggio SOAP, grazie alla possibilità di estenderne la struttura.

Se le condizioni seguenti vengono soddisfatte, è possibile utilizzare le intestazioni WS-Security per inviare a SQL Server le informazioni sull'utente e sulla password come parte dell'applicazione SOAP.

  • L'istanza di SQL Server è stata installata in modalità mista. Ciò significa che sono supportati sia account di accesso di SQL Server che di Windows.

  • Sono state definite le impostazioni seguenti per l'endpoint:

    • LOGIN_TYPE = MIXED.

    • PORTS=(SSL), è stata specificata una porta di tipo SSL.

  • Agli utenti che non fanno parte di account di accesso di Windows, ad esempio gli account di accesso di SQL Server, sono state concesse le autorizzazioni per l'endpoint.

Quando una richiesta SOAP contiene un'intestazione WS-Security, le credenziali nell'intestazione sostituiscono eventuali credenziali utilizzate al momento dell'esecuzione dell'autenticazione HTTP per l'endpoint.

Utilizzo di intestazioni WS-Security per l'autenticazione di SQL Server

È possibile utilizzare l'intestazione WS-Security in richieste SOAP inviate a un'istanza di SQL Server per supportare le funzionalità seguenti:

  • Trasporto delle credenziali di autorizzazione di SQL Server (SQL-Auth).

  • Gestione di una password di SQL Server scaduta.

Trasporto di credenziali SQL-Auth

Nell'esempio seguente viene illustrata la modalità di utilizzo dell'intestazione WS-Security in una richiesta SOAP inviata a un'istanza di SQL Server per il trasporto delle credenziali di autorizzazione di 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>

In questo esempio l'elemento <wsse:UserNameToken> viene utilizzato per contenere i due sottoelementi seguenti:

  • Elemento <wsse:Username> con il nome utente di SQL Server.

  • Elemento <wsse:Password> il cui attributo facoltativo Type è impostato su un valore di "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText". Lo scopo è quello di contenere il testo della password dell'utente.

Nota

Quando la modalità mista è supportata per SQL Server e l'endpoint SOAP HTTP, è necessaria una porta SSL per garantire almeno la crittografia nominale delle credenziali dell'utente.

Gestione di una password di SQL Server scaduta

In SQL Server è inclusa la funzionalità di scadenza della password. Quando durante un tentativo di accesso un server determina che la password per l'utente è scaduta, per il corretto completamento del processo di accesso è necessario che il client invii sia la vecchia che la nuova password per l'utente.

Per aggiornare il client in modo che questa funzionalità venga supportata, è possibile completare questo processo utilizzando come esempio di modello l'intestazione WS-Security seguente.

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

È inoltre possibile modificare una password durante una sessione SOAP. La richiesta di modifica della password verrà soddisfatta solo dopo l'avvio di una nuova sessione.

Per modificare la password come parte di una nuova sessione SOAP, ad esempio, aggiungere il codice seguente alla sezione <SOAP-ENV:Header>:

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

Per ulteriori informazioni, vedere Utilizzo delle sessioni SOAP.

L'elemento <wsse:UserNameToken> è inoltre leggermente modificato per contenere i tre sottoelementi seguenti, con differenze minime rispetto all'esempio precedente per l'invio delle credenziali utente:

  • Elemento <wsse:Username> con il nome utente di SQL Server.

  • Elemento <wsse:Password> il cui attributo facoltativo Type è impostato su un valore di "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText". Lo scopo è quello di contenere il testo della nuova password dell'utente.

  • Elemento <sql:OldPassword> il cui attributo facoltativo Type è impostato su un valore di "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText". Lo scopo è quello di contenere il testo della vecchia password dell'utente.

Schema XML per l'intestazione WS-Security

Di seguito è riportato un frammento di schema per l'intestazione WS-Security, che è possibile implementare solo in 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>