SOAP 経由の SQL 認証

この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。

SQL Server のネイティブ XML Web サービスでは、次のいずれかの種類のセキュリティ プリンシパルを使用してセキュリティを管理できます。

  • Windows ユーザー アカウントおよび Windows グループ アカウント、またはそのいずれか。

  • SQL Server ログイン。

HTTP エンドポイント認証に Windows アカウントを使用する場合、追加の SOAP 認証ヘッダーは必要ありません。HTTP エンドポイント認証の詳細については、「エンドポイント認証の種類」および「GRANT (エンドポイントの権限の許可) (Transact-SQL)」を参照してください。

ただし、SQL Server ログインを使用する場合、クライアント アプリケーションでは SOAP 認証を格納する Web Services Security (WS-Security) ヘッダーを追加で実装し、SQL Server のログイン情報をサーバーに送信する必要があります。

SQL Server ログインの SOAP 認証では、どの HTTP 認証の種類でも使用できます。さらに、HTTP 層での認証に使用するユーザー アカウントは、ローカル サーバーへの Windows アクセスだけを必要とします。また、SQL Server ログインは必ずしも必要とされません。

注意

SOAP を経由した SQL Server ベースの認証では、エンドポイントの LOGIN_TYPE オプションは、混合モードで構成する必要があります (LOGIN_TYPE=MIXED)。混合モードでエンドポイントを操作するには、SSL (Secure Sockets Layer) チャネルを使用してサービスを提供するようエンドポイントを構成する必要もあります。詳細については、「CREATE ENDPOINT (Transact-SQL)」を参照してください。

WS-Security ヘッダーを使用した SQL Server ログインの認証 (混合モードのみ)

WS-Security は、SOAP メッセージ構造を拡張して、セキュリティで保護された Web サービスを支援するために提案された仕様です。必要に応じて WS-Security を使用し、SOAP メッセージの構造を拡張することにより、そのメッセージ内で SOAP クライアントと SQL Server のインスタンスの間で資格情報とトークンを直接やり取りするための認証メカニズムを提供できます。

次の条件を満たす場合、WS-Security ヘッダーを使用して、SOAP クライアント アプリケーションの一部として SQL Server のユーザーおよびパスワードの情報を指定できます。

  • SQL Server のインスタンスを混同モードでインストールした場合。これは、Windows ログインと SQL Server ログインの両方がサポートされていることを意味します。

  • エンドポイントが次のように設定されている場合。

    • LOGIN_TYPE = MIXED。

    • PORTS=(SSL)。SSL の種類のポートが指定されました。

  • SQL Server ログインなど、Windows ログインの一部でないユーザーにエンドポイント権限が付与されている場合。

SOAP 要求に WS-Security ヘッダーが含まれている場合、エンドポイントに対する HTTP ベース認証の実行時に使用した資格情報よりも、ヘッダーの資格情報の方が優先されます。

SQL Server 認証での WS-Security ヘッダーの使用

次の項目をサポートするために、SQL Server のインスタンスに送信された SOAP 要求で、WS-Security ヘッダーを使用できます。

  • SQL Server 承認 (SQL-Auth) 資格情報の送信。

  • 期限切れの SQL Server パスワードの処理。

SQL-Auth 資格情報の送信

次の例は、SQL Server 承認 (SQL-Auth) の資格情報を送信するために、SQL Server のインスタンスへの SOAP 要求で WS-Security ヘッダーを使用する方法を示しています。

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

この例では、次の 2 つのサブ要素を含めるために <wsse:UserNameToken> 要素が使用されています。

  • SQL Server ユーザー名を持つ <wsse:Username> 要素。

  • "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText" の値に設定された、省略可能な Type 属性を持つ <wsse:Password> 要素。この要素は、ユーザーのパスワードのテキストを含めるために使用されます。

注意

SQL Server および HTTP SOAP エンドポイントで混合モードがサポートされている場合、ユーザーの資格情報の暗号化として少なくとも名目上の暗号化を提供するために SSL ポートが必要です。

期限切れの SQL Server パスワードの処理

SQL Server には、パスワードの有効期限に関する機能が用意されています。ログイン試行中、サーバーによってユーザーのパスワードが期限切れであると判断されると、ログイン プロセスを正常に完了させるために、パスワード機能からクライアントに、ユーザーの古いパスワードと新しいパスワードの両方を返すように求められます。

この機能をサポートするようにクライアントを更新するには、サンプル テンプレートとして次の WS-Security ヘッダーを使用することで、このプロセスを完了できます。

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

パスワードの変更も、SOAP セッションの一部として実行できます。パスワードの変更要求は、新しいセッションが開始されたときのみ許可されます。

たとえば、新しい SOAP セッションの一部としてパスワードを変更するには、<SOAP-ENV:Header> セクションに次を追加します。

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

詳細については、「SOAP セッションを使用した作業」を参照してください。

また、<wsse:UserNameToken> 要素は少し変更されており、ユーザーの資格情報を送信するために、前の例とはわずかに異なる次の 3 つのサブ要素が含まれています。

  • SQL Server ユーザー名を持つ <wsse:Username> 要素。

  • "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText" の値に設定された、省略可能な Type 属性を持つ <wsse:Password> 要素。この要素は、ユーザーの新しいパスワードのテキストを含めるために使用されます。

  • "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText" の値に設定された、省略可能な Type 属性を持つ <sql:OldPassword> 要素。この要素は、ユーザーの古いパスワードのテキストを含めるために使用されます。

WS-Security ヘッダーの XML スキーマ

次に、スキーマの SQL Server のみを使用した実装用の WS-Security ヘッダーに関する部分を示します。

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