---
title: "xDBコレクションデータベースのためにSQL Always Encryptedを設定してください"
slug: "configure-sql-always-encrypted-for-the-xdb-collection-database"
abstract: "Windows Key StoreやAzure Key Vaultを使って、すべてのSitecore xDBシャードでAlways Encrypted機能を有効にする方法。"
---
# xDBコレクションデータベースのためにSQL Always Encryptedを設定してください

**適用対象**

xDBコレクションデータベース(SQL)のみ。

**Sitecoreインストールフレームワーク**

「常に暗号化」はデフォルトで有効 **になっていません** 。

**Azure Toolkit**

「常に暗号化」はデフォルトで有効 **になっていません** 。

xDBコレクションデータベースは、機密データを含む特定の列に対してAlways Encryptedをサポートしています。このトピックでは、既存のxDBコレクションデータベースでAlways Encryptedを有効にする方法について説明します。

## キーの設定

カラムマスターキー(CMK)とカラム暗号化キー(CEK)の生成手順は、使用するキーストアの種類によって異なります。

### オプション1:Windows Key Store(Windows Key Store)

Windows Key Storeを使用している場合、以下の手順が適用されます。

#### キーを作成する

カラムマスターキー(CMK)およびカラム暗号化キー(CEK)の作成および使用に関する情報は、Microsoftの[Always Encryptedドキュメント](https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/always-encrypted-database-engine?view=sql-server-2017) を参照してください。全体の手順は以下の通りです:

-   [カラムマスターキー(CMK)とカラム暗号化キー(CEK)を作成します。](https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/create-and-store-column-master-keys-always-encrypted?view=sql-server-2017)
    
-   [CMKをエクスポートし、](https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/configure-always-encrypted-using-sql-server-management-studio?view=sql-server-2017)xDBコレクションデータベースに接続するロールの適切な証明書ストアにインポートします。
    
-   各ロールのユーザーが[CMKへのアクセス](https://docs.secureauth.com/display/KBA/Grant+Permission+to+Use+Signing+Certificate+Private+Key)権限を持っていることを確認してください。 **ローカルマシン** 証明書ストアを使用している場合、各ロールユーザーは **読み取り** 権限が必要です。
    
    **位相**
    
    **役割**
    
    **例ユーザー** (<username>)
    
    XPシングル
    
    xConnect(スタンドアロン)(w3wp)
    
    IIS AppPool\\AppPoolName
    
    xConnect Search Indexer(Windowsサービス)
    
    NT自治体\\ローカルサービス
    
    XP スケールド
    
    xConnect コレクションSearch(w3wp)
    
    IIS AppPool\\AppPoolName
    
    xConnect コレクション(w3wp)
    
    IIS AppPool\\AppPoolName
    
    xConnect Search Indexer(Windowsサービス)
    
    NT自治体\\ローカルサービス
    

> !注Azure Web App Servicesを使っているがAzure Key Vaultは使っていない場合は、「 [Azure Web App Serviceで常に暗号化されたSQL](https://blogs.msdn.microsoft.com/sqlcat/2016/09/15/using-sql-always-encrypted-with-azure-web-app-service/)を使う」をご覧ください。

#### xConnectの役割を設定する

xDBコレクションデータベースにアクセスするすべてのロールインスタンスに対して、以下の手順を完了する必要があります:

-   xConnect Search インデクサー
-   xConnect Collection Searchサービス
-   xConnect コレクションサービス

> !重要Index Workerファイルの設定も変更するのを忘れないでください。

xConnectの役割をAlways Encryptedを使用するように設定するには:

-   <role-root>\\App\_data\\config\\Sitecore\\Collection\\sc.Xdb.Collection.Data.Sql.xml設定ファイルを開いて、UseAlwaysEncrypted要素をtrueに設定します:

<UseAlwaysEncrypted>true</UseAlwaysEncrypted>

### オプション2: Azure Key Vault

Azure Key Vaultを使用している場合、以下の手順が適用されます。

#### キーを作成する

MicrosoftのAzure Key Vaultの設定に関する情報は、Microsoftの「 [Azure Key Vault」ドキュメント](https://docs.microsoft.com/en-us/azure/key-vault/key-vault-get-started) を参照してください。全体的な手順は以下の通りです:

-   [鍵の保管庫と新しい鍵を作成します](https://docs.microsoft.com/en-us/azure/key-vault/)。
-   Register applications (xConnect roles) in Azure Active Directory.
-   アプリケーションに鍵やシークレットの使用を許可してください。
-   [Azureキーボールトに基づいてカラムマスターキー(CMK)およびカラム暗号化キー(CEK)を作成します。この方法については、https://docs.microsoft.com/en-us/azure/sql-database/sql-database-always-encrypted-azure-key-vaultのマスターキー構成セクションをご覧ください。](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-always-encrypted-azure-key-vault)

#### xConnectの役割を設定する

xDBコレクションデータベースにアクセスするすべてのロールインスタンスに対して、以下の手順を完了する必要があります:

-   xConnect Search インデクサー
-   xConnect Collection Searchサービス
-   xConnect コレクションサービス

> !重要Index Workerファイルの設定も変更するのを忘れないでください。

1.  <role-root>\\App\_data\\config\\Sitecore\\Collection\\sc.Xdb.Collection.Data.Sql.xml設定ファイルを開いて、UseAlwaysEncrypted要素をtrueに設定します:
    
    <UseAlwaysEncrypted>true</UseAlwaysEncrypted>
    
2.  Sitecore 9.1 Update-1以降では、App\_Data\\Config\\Sitecore\\Collection\\sc.Xdb.Collection.Data.Sql.KeyStoreProviders.xml.disabledを有効にします。Sitecore 9.1初期リリースおよびそれ以前では、<role-root>\\App\_Data\\Config\\Sitecore\\CoreServices\\sc.Xdb.Sql.Common.Encryption.AzureKeyVault.xml.disabledを有効にします。
    
    > !注このファイルはClientIdAppSettingsKey (デヴォルト値: AzureKeyVaultClientId)とClientSecretAppSettingsKey (デフォルト値: AzureKeyVaultClientSecret)設定の名前を定義しています。これらの設定を変更する必要はありません。
    
3.  <role-root>\\App\_Config\\App.configで、以下のアプリ設定を追加してください。Azure Key Vault(ClientId、SecretId)から値をコピーしてください:
    
    <add key="AzureKeyVaultClientId" value="1fb143e0-b103-472b-a281-c8727d3dfb2f" />
    <add key="AzureKeyVaultClientSecret" value="mfCEb0z5r3UOIBMG38tpbdi1OvC9NvUSJV9u+VwpGEg=" />
## すべてのシャードでAlways Encryptedを設定する

以下の手順は各シャードで完了しなければならず、CEKキーとCMKキーが作成されていると仮定しています。

1.  xDBコレクションデータベースからすべてのストアドプロシージャを含むスクリプトを生成します。スクリプトを保存します。
    
2.  xDBコレクションデータベースからすべてのストアドプロシージャを削除してください。
    
3.  以下の表で変更追跡を無効にしてください:
    
    -   \[連絡先\]
    -   \[接触ファセット\]
    -   \[交流\]
    -   \[インタラクションファセット\]
4.  以下の列に対して対応する暗号化タイプでAlways Encryptedを設定してください。
    
    **柱**
    
    **暗号化の種類**
    
    \[ContactFacets\]。\[FacetData\]
    
    ランダム化
    
    \[ContactFacets\_Staging\]。\[FacetData\]
    
    ランダム化
    
    \[InteractionFacets\]。\[FacetData\]
    
    ランダム化
    
    \[InteractionFacets\_Staging\]。\[FacetData\]
    
    ランダム化
    
    \[デバイスプロファイルファセット\]。\[ファセットデータ\]
    
    ランダム化
    
    \[DeviceProfileFacets\_Staging\]。\[FacetData\]
    
    ランダム化
    
    \[連絡先識別子\]\[識別子\]
    
    決定論的
    
    \[連絡先識別子\]\[出典\]
    
    決定論的
    
    \[ContactIdentifiers\_Staging\]。\[識別子\]
    
    決定論的
    
    \[ContactIdentifiers\_Staging\]。\[出典\]
    
    決定論的
    
    \[連絡先識別子インデックス\]。\[識別子\]
    
    決定論的
    
    \[連絡先識別子インデックス\]。\[出典\]
    
    決定論的
    
    \[ContactIdentifiersIndex\_Staging\]。\[識別子\]
    
    決定論的
    
    \[ContactIdentifiersIndex\_Staging\]。\[出典\]
    
    決定論的
    
    \[GetContactIdsByIdentifiers\_Staging\]。\[識別子\]
    
    決定論的
    
    \[GetContactIdsByIdentifiers\_Staging\]。\[出典\]
    
    決定論的
    
    \[GetContactsByIdentifiers\_Staging\]。\[識別子\]
    
    決定論的
    
    \[GetContactsByIdentifiers\_Staging\]。\[出典\]
    
    決定論的
    
    \[CheckContacts\_Staging\]。\[識別子\]
    
    決定論的
    
    \[CheckContacts\_Staging\]。\[出典\]
    
    決定論的
    
    \[UnlockContactIdentifiersIndex\_Staging\]。\[識別子\]
    
    決定論的
    
    \[UnlockContactIdentifiersIndex\_Staging\]。\[出典\]
    
    決定論的
    
5.  ステップ1で作成したスクリプトを使ってストアドプロシージャを復元します。
    
6.  以下の表で変更追跡を再有効にしてください:
    
    -   \[連絡先\]
    -   \[接触ファセット\]
    -   \[交流\]
    -   \[インタラクションファセット\]
7.  制限されたユーザーに以下の権限を付与します(デフォルトではこのユーザー名はcollection\_userです)
    
    GRANT VIEW ANY COLUMN MASTER KEY DEFINITION TO collection\_user
    GRANT VIEW ANY COLUMN ENCRYPTION KEY DEFINITION TO collection\_user
    
8.  暗号化を適用する前にデータベースに連絡先が含まれていた場合は、すべてのシャードに対して以下のクエリを実行してください。
    
    UPDATE ContactIdentifiersIndex SET IdentifierHash = DATALENGTH(Identifier)
    UPDATE ContactIdentifiers SET IdentifierHash = DATALENGTH(Identifier)