SQL Server-Authentifizierung über SOAP

Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.

Für systemeigene XML-Webdienste in SQL Server kann die Verwaltung der Sicherheit durch einen der folgenden Typen von Sicherheitsprinzipalen erfolgen:

  • Windows-Benutzerkonten oder Windows-Gruppenkonten oder beide.

  • SQL Server-Anmeldungen.

Wenn zur HTTP-Endpunktauthentifizierung Windows-Konten verwendet werden, sind keine zusätzlichen SOAP-Authentifizierungsheader erforderlich. Weitere Informationen zur HTTP-Endpunktauthentifizierung finden Sie unter Endpunktauthentifizierungs-Typen und GRANT (Endpunktberechtigungen) (Transact-SQL).

Wenn jedoch SQL Server-Anmeldungen verwendet werden, muss die Clientanwendung zusätzlich Web Services Security (WS-Security)-Header zur SOAP-Authentifizierung implementieren, um SQL Server-Anmeldungsinformationen einzuschließen und an den Server zu senden.

Zur SOAP-Authentifizierung von SQL Server-Anmeldungen können alle HTTP-Authentifizierungstypen verwendet werden. Außerdem erfordert das Benutzerkonto, das zur Authentifizierung in der HTTP-Ebene verwendet wird, lediglich den Windows-Zugriff auf den lokalen Server und setzt nicht unbedingt eine SQL Server-Anmeldung voraus.

HinweisHinweis

Zur SQL Server-basierten Authentifizierung über SOAP muss die Option LOGIN_TYPE für den Endpunkt für den gemischten Modus konfiguriert sein (LOGIN_TYPE=MIXED). Der Betrieb eines Endpunkts im gemischten Modus setzt auch voraus, dass der Endpunkt zur Dienstbereitstellung über einen SSL-Kanal (Secure Sockets Layer) konfiguriert ist. Weitere Informationen finden Sie unter CREATE ENDPOINT (Transact-SQL).

Verwenden von WS-Security-Headern zur Authentifizierung einer SQL Server-Anmeldung (nur gemischter Modus)

WS-Security ist eine empfohlene Spezifikation zur Verbesserung der Sicherheit von Webdiensten durch Erweitern der SOAP-Meldungsstruktur. WS-Security kann bei Bedarf verwendet werden, um einen Authentifizierungsmechanismus bereitzustellen, bei dem Anmeldeinformationen und Token direkt innerhalb der SOAP-Meldung zwischen SOAP-Clients und der SQL Server-Instanz übertragen werden können, indem die Struktur der SOAP-Meldung erweitert wird.

Wenn die folgenden Bedingungen erfüllt sind, können Sie WS-Security-Header verwenden, um SQL Server Benutzer- und Kennwortinformationen als Bestandteil Ihrer SOAP-Clientanwendung bereitzustellen:

  • Die SQL Server-Instanz wurde im gemischten Modus installiert. Das bedeutet, dass sowohl Windows- als auch SQL Server-Anmeldungen unterstützt werden.

  • Der Endpunkt weist die folgenden Einstellungen auf:

    • LOGIN_TYPE = MIXED.

    • PORTS=(SSL), ein SSL-Anschluss wurde angegeben.

  • Es wurden Endpunktberechtigungen an Benutzer erteilt, die nicht Teil der Windows-Anmeldung sind, wie z. B. SQL Server-Anmeldungen.

Wenn eine SOAP-Anforderung einen WS-Security-Header enthält, setzen die Anmeldeinformationen in diesem Header alle Anmeldeinformationen außer Kraft, die bei der HTTP-basierten Authentifizierung für den Endpunkt verwendet wurden.

Verwenden des WS-Security-Headers zur SQL Server-Authentifizierung

Der WS-Security-Header kann in SOAP-Anforderungen verwendet werden, die an eine Instanz von SQL Server gesendet werden, um Folgendes zu unterstützen:

  • Transportieren von Anmeldeinformationen zur SQL Server-Autorisierung (SQL-Auth).

  • Behandeln eines abgelaufenen SQL Server-Kennworts.

Transportieren von SQL-Auth-Anmeldeinformationen

Das folgende Beispiel zeigt, wie der WS-Security-Header in einer SOAP-Anforderung für eine Instanz von SQL Server verwendet werden kann, um die Anmeldeinformationen zur SQL Server-Autorisierung (SQL-Auth) zu transportieren.

<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 diesem Beispiel wird das <wsse:UserNameToken>-Element verwendet und enthält die beiden folgenden untergeordneten Elemente:

  • <wsse:Username>-Element, das den SQL Server-Benutzernamen enthält.

  • <wsse:Password>-Element, dessen optionales Type-Attribut auf einen Wert von "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText" gesetzt ist. Dieses Element enthält den Text des Benutzerkennworts.

HinweisHinweis

Wenn der gemischte Modus für SQL Server und den HTTP-SOAP-Endpunkt unterstützt wird, ist ein SSL-Anschluss erforderlich, um zumindest eine nominelle Verschlüsselung der Anmeldeinformationen des Benutzers bereitzustellen.

Behandeln eines abgelaufenen SQL Server-Kennworts

SQL Server enthält das Feature des Ablaufs von Kennwörtern. Wenn ein Server bei einem Anmeldeversuch erkennt, dass das Kennwort für den Benutzer abgelaufen ist, erfordert es das Kennwortfeature, dass der Client sowohl das alten Kennwort für den Benutzer als auch das neue Kennwort zurückmeldet. Erst dann kann der Anmeldevorgang erfolgreich abgeschlossen werden.

Um den Client für die Unterstützung dieses Features zu aktualisieren, können Sie diesen Prozess mithilfe des folgenden WS-Security-Headers als Vorlagenbeispiel abschließen.

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

Die Änderung eines Kennworts kann auch im Rahmen einer SOAP-Sitzung erfolgen. Die Anforderung zum Ändern des Kennworts wird erst berücksichtigt, wenn eine neue Sitzung gestartet wird.

Um beispielsweise das Kennwort im Rahmen einer neuen SOAP-Sitzung zu ändern, fügen Sie dem <SOAP-ENV:Header>-Abschnitt folgenden Eintrag hinzu:

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

Weitere Informationen finden Sie unter Arbeiten mit SOAP-Sitzungen.

Außerdem wird das <wsse:UserNameToken>-Element geringfügig geändert, sodass es die folgenden drei untergeordneten Elemente mit kleinen Unterschieden gegenüber dem vorigen Beispiel zum Senden von Benutzeranmeldeinformationen enthält:

  • <wsse:Username>-Element, das den SQL Server-Benutzernamen enthält.

  • <wsse:Password>-Element, dessen optionales Type-Attribut auf einen Wert von "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText" gesetzt wurde. Dieses Element gibt den Text des neuen Kennworts für den Benutzer an.

  • <sql:OldPassword>-Element, dessen optionales Type-Attribut auf einen Wert von "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText" gesetzt wurde. Dieses Element gibt den Text des alten Kennworts für den Benutzer an.

XML-Schema für WS-Security-Header

Das folgende Schemenfragment für den WS-Security-Header ist ausschließlich für die Implementierung mit SQL Server vorgesehen.

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