セキュリティで保護されたエンクレーブが設定された Always EncryptedAlways Encrypted with Secure Enclaves

このトピックの適用対象: ○SQL Server XAzure SQL DatabaseXAzure SQL Data Warehouse XParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

セキュリティで保護されたエンクレーブが設定された Always Encrypted は、Always Encrypted 機能に追加機能を提供します。Always Encrypted with secure enclaves provides additional functionality to the Always Encrypted feature.

SQL Server 2016 で導入された Always Encrypted は、注意が必要なデータの機密性を、マルウェアと、SQL Server の高い特権を持つ未承認の SQL ユーザーから保護します。Introduced in SQL Server 2016, Always Encrypted protects the confidentiality of sensitive data from malware and high-privileged unauthorized users of SQL Server. 高い特権を持つ未承認のユーザーとは、DBA、コンピューター管理者、クラウド管理者、またはサーバー インスタンス、ハードウェアなどに対する正当なアクセス権を持ち、実際のデータの一部またはすべてにアクセスすべきではないユーザーです。High-privileged unauthorized users are DBAs, computer admins, cloud admins, or anyone else who has legitimate access to server instances, hardware, etc., but who should not have access to some or all of the actual data.

これまで Always Encrypted では、クライアント側でデータを暗号化し、データまたは対応する暗号化キーが SQL Server Engine 内でプレーンテキストで表示されないようにすることで、データを保護していました。Until now, Always Encrypted protected the data by encrypting it on the client side and never allowing the data or the corresponding cryptographic keys to appear in plaintext inside the SQL Server Engine. その結果、データベース内の暗号化された列に対する機能が大幅に制限されていました。As a result, the functionality on encrypted columns inside the database was severely restricted. SQL Server で暗号化されたデータに対して実行できる操作は、等価比較のみでした (また、等価比較は決定論的な暗号化でのみ使用できました)。The only operations SQL Server could perform on encrypted data were equality comparisons (and equality comparisons were only available with deterministic encryption). 暗号化操作 (最初のデータ暗号化、キーの交換) や高度な計算 (パターン マッチングなど) を含む他のすべての操作は、データベース内ではサポートされていませんでした。All other operations, including cryptographic operations (initial data encryption or key rotation), or rich computations (for example, pattern matching) were not supported inside the database. ユーザーがクライアント側でこのような操作を実行するには、データベースの外部にデータを移動する必要がありました。Users needed to move the data outside of the database to perform these operations on the client-side.

セキュリティで保護されたエンクレーブが設定された Always Encrypted では、サーバー側でセキュリティで保護されたエンクレーブ内のプレーンテキストに対する計算を許可することで、このような制限に対応しています。Always Encrypted with secure enclaves addresses these limitations by allowing computations on plaintext data inside a secure enclave on the server side. セキュリティで保護されたエンクレーブは、SQL Server プロセス内のメモリの保護された領域であり、SQL Server エンジン内の機密データを処理するための信頼できる実行環境として機能します。A secure enclave is a protected region of memory within the SQL Server process, and acts as a trusted execution environment for processing sensitive data inside the SQL Server engine. セキュリティで保護されたエンクレーブは、その他の SQL Server やホスティング マシン上の他のプロセスに対してはブラック ボックスに見えます。A secure enclave appears as a black box to the rest of the SQL Server and other processes on the hosting machine. デバッガーを使用しても、外部からエンクレーブ内のデータやコードを表示する方法はありません。There is no way to view any data or code inside the enclave from the outside, even with a debugger.

Always Encrypted は、次の図のようにセキュリティで保護されたエンクレーブを使用します。Always Encrypted uses secure enclaves as illustrated in the following diagram:

データ フロー (data flow)

SQL Server Engine は、アプリケーションのクエリを解析するときに、セキュリティで保護されたエンクレーブを使用する必要がある暗号化されたデータに対する操作がクエリに含まれているかどうかを判断します。When parsing an application's query, the SQL Server Engine determines if the query contains any operations on encrypted data that require the use of the secure enclave. セキュリティで保護されたエンクレーブにアクセスする必要があるクエリの場合:For queries where the secure enclave needs to be accessed:

  • クライアント ドライバーから、操作に必要な列の暗号化キーが (セキュリティで保護されたチャネルを介して) セキュリティで保護されたエンクレーブに送信されます。The client driver sends the column encryption keys required for the operations to the secure enclave (over a secure channel).
  • 次に、クライアント ドライバーから、暗号化されたクエリ パラメーターと共に実行に関するクエリが送信されます。Then, the client driver submits the query for execution along with the encrypted query parameters.

クエリ処理時に、データまたは列の暗号化キーは、セキュリティで保護されたエンクレーブの外部にある SQL Server エンジンではプレーンテキストで公開されません。During query processing, the data or the column encryption keys are not exposed in plaintext in the SQL Server Engine outside of the secure enclave. SQL Server エンジンでは、暗号化された列に対する暗号化操作と計算が、セキュリティで保護されたエンクレーブに委任されます。The SQL Server Engine delegates cryptographic operations and computations on encrypted columns to the secure enclave. セキュリティで保護されたエンクレーブでは、必要に応じて、暗号化された列に格納されているクエリ パラメーターやデータが復号化され、要求された操作が実行されます。If needed, the secure enclave decrypts the query parameters and/or the data stored in encrypted columns and performs the requested operations.

セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用する理由Why use Always Encrypted with secure enclaves?

セキュリティで保護されたエンクレーブを設定して Always Encrypted を使用すると、注意が必要なデータの機密性を保護できるだけでなく、次の利点もあります。With secure enclaves, Always Encrypted protects the confidentiality of sensitive data while providing the following benefits:

  • インプレース暗号化: 最初のデータ暗号化や列暗号化キーの交換など、機密データに対する暗号化操作はセキュリティで保護されたエンクレーブ内で実行され、データをデータベースの外部に移動する必要はありません。In-place encryption - cryptographic operations on sensitive data, for example: initial data encryption or rotating a column encryption key, are performed inside the secure enclave and do not require moving the data outside of the database. ALTER TABLE Transact-SQL ステートメントを使用してインプレース暗号化を発行することができます。SSMS の Always Encrypted ウィザードや Set-SqlColumnEncryption PowerShell コマンドレットなどのツールを使用する必要はありません。You can issue in-place encryption using the ALTER TABLE Transact-SQL statement, and you do not need to use tools, such as the Always Encrypted wizard in SSMS or the Set-SqlColumnEncryption PowerShell cmdlet.

  • 高度な計算 (プレビュー) : パターン マッチング (LIKE 述語) と範囲比較など、暗号化された列に対する操作は、セキュリティで保護されたエンクレーブ内でサポートされます。そのため、データベース システム内でこのような計算を実行する必要がある幅広いアプリケーションやシナリオに Always Encrypted を使用できます。Rich computations (preview) - operations on encrypted columns, including pattern matching (the LIKE predicate) and range comparisons, are supported inside the secure enclave, which unlocks Always Encrypted to a broad range of applications and scenarios that require such computations to be performed inside the database system.

重要

SQL Server 2019 プレビューSQL Server 2019 preview では、高度な計算が複数のパフォーマンス最適化とエラー処理拡張の妨げとなっており、現在は既定で無効になっています。In SQL Server 2019 プレビューSQL Server 2019 preview, rich computations are pending several performance optimizations and error-handling enhancements, and are currently disabled by default. 高度な計算を有効にする方法に関するページを参照してください。To enable rich computations, see Enable rich computations.

SQL Server 2019 プレビューSQL Server 2019 preview のセキュリティで保護されたエンクレーブが設定された Always Encrypted は、Windows で仮想化ベースのセキュリティ (VBS) のセキュリティで保護されたメモリ エンクレーブ (仮想保護モード (VSM) エンクレーブとも呼ばれます) を使用します。In SQL Server 2019 プレビューSQL Server 2019 preview, Always Encrypted with secure enclaves uses Virtualization-based Security (VBS) secure memory enclaves (also known as Virtual Secure Mode, or VSM enclaves) in Windows.

セキュリティで保護されたエンクレーブの構成証明Secure Enclave Attestation

SQL Server エンジン内のセキュリティで保護されたエンクレーブは、暗号化されたデータベース列に格納されている機密データと、それに対応するプレーンテキストの列の暗号化キーにアクセスできます。The secure enclave inside the SQL Server Engine can access sensitive data stored in encrypted database columns and the corresponding column encryption keys in plaintext. エンクレーブの計算を伴うクエリを SQL Server に送信する前に、アプリケーション内のクライアント ドライバーで、セキュリティで保護されたエンクレーブが特定のテクノロジ (VBS など) に基づく正規のエンクレーブであり、エンクレーブ内で実行されているコードが、エンクレーブ内で実行するために署名されていることを検証する必要があります。Before submitting a query that involves enclave computations to SQL Server, the client driver inside the application must verify the secure enclave is a genuine enclave based on a given technology (for example, VBS) and the code running inside the enclave has been signed for running inside the enclave.

エンクレーブを検証するプロセスは、エンクレーブの構成証明と呼ばれ、通常、外部の構成証明サービスに接続するアプリケーション内のクライアント ドライバーと SQL Server の両方も含まれます。The process of verifying the enclave is called enclave attestation, and it usually involves both a client driver within the application and SQL Server contacting an external attestation service. 構成証明プロセスの詳細は、エンクレーブ テクノロジと構成証明サービスによって変わります。The specifics of the attestation process depend on the enclave technology and the attestation service.

SQL Server 2019 プレビューSQL Server 2019 preview 内の VBS セキュリティで保護されたエンクレーブに対して SQL Server がサポートする構成証明プロセスは、ホスト ガーディアン サービス (HGS) を構成証明サービスとして使用する Windows Defender System Guard ランタイム構成証明です。The attestation process SQL Server supports for VBS secure enclaves in SQL Server 2019 プレビューSQL Server 2019 preview is Windows Defender System Guard runtime attestation, which uses Host Guardian Service (HGS) as an attestation service. お使いの環境で HGS を構成し、SQL Server インスタンスをホストしているマシンを HGS に登録する必要があります。You need to configure HGS in your environment and register the machine hosting your SQL Server instance in HGS. また、HGS 構成証明を使用してクライアント アプリケーションまたはツール (たとえば、SQL Server Management Studio) も構成する必要があります。You also must configure you client applications or tools (for example, SQL Server Management Studio) with an HGS attestation.

セキュリティで保護されたエンクレーブ プロバイダーSecure Enclave Providers

セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用するには、アプリケーションでこの機能をサポートするクライアント ドライバーを使用する必要があります。To use Always Encrypted with secure enclaves, an application must use a client driver that supports the feature. SQL Server 2019 プレビューSQL Server 2019 preview では、アプリケーションで .NET Framework 4.7.2 と .NET Framework Data Provider for SQL Server を使用する必要があります。In SQL Server 2019 プレビューSQL Server 2019 preview, your applications must use .NET Framework 4.7.2 and .NET Framework Data Provider for SQL Server. さらに、.NET アプリケーションは、使用しているエンクレーブの種類 (VBS など) や構成証明サービス (HGS など) に固有のセキュリティで保護されたエンクレーブ プロバイダーで構成する必要があります。In addition, .NET applications must be configured with a secure enclave provider specific to the enclave type (for example, VBS) and the attestation service (for example, HGS), you are using. サポートされているエンクレーブ プロバイダーは、アプリケーションとの統合が必要な NuGet パッケージで個別にリリースされます。The supported enclave providers are shipped separately in a NuGet package, which you need to integrate with your application. エンクレーブ プロバイダーは、構成証明プロトコルと、特定の種類のセキュリティで保護されたエンクレーブとのセキュリティで保護されたチャネルを確立するためのクライアント側ロジックを実装します。An enclave provider implements the client-side logic for the attestation protocol and for establishing a secure channel with a secure enclave of a given type.

エンクレーブ対応キーEnclave-enabled Keys

セキュリティで保護されたエンクレーブが設定された Always Encrypted では、エンクレーブ対応キーの概念が導入されました。Always Encrypted with secure enclaves introduces the concept of enclave-enabled keys:

  • Enclave 対応列マスター キー: データベース内の列マスター キー メタデータ オブジェクトに ENCLAVE_COMPUTATIONS プロパティが指定されている列マスター キーです。Enclave-enabled column master key - a column master key that has the ENCLAVE_COMPUTATIONS property specified in the column master key metadata object inside the database. 列マスター キー メタデータ オブジェクトには、メタデータ プロパティの有効な署名も含める必要があります。The column master key metadata object must also contain a valid signature of the metadata properties.
  • エンクレーブ対応列暗号化キー: エンクレーブ対応列マスター キーで暗号化された列暗号化キーです。Enclave-enabled column encryption key - a column encryption key that is encrypted with an enclave-enabled column master key.

SQL Server エンジンは、クエリで指定された操作をセキュリティで保護されたエンクレーブ内で実行する必要があると判断した場合、SQL Server エンジンはクライアント ドライバーに対して、セキュリティで保護されたエンクレーブを使用した計算に必要な列暗号化キーを共有するよう要求します。When the SQL Server Engine determines operations, specified in a query, need to be performed inside the secure enclave, the SQL Server Engine requests the client driver shares the column encryption keys that are needed for the computations with the secure enclave. クライアント ドライバーでは、キーがエンクレーブ対応であり (つまり、エンクレーブ対応列マスター キーを使用して暗号化されており)、適切に署名されている場合にのみ、列暗号化キーを共有します。The client driver shares the column encryption keys only if the keys are enclave-enabled (that is, encrypted with enclave-enabled column master keys) and they're properly signed. それ以外の場合、クエリは失敗します。Otherwise, the query fails.

エンクレーブ対応列Enclave-enabled Columns

エンクレーブ対応列は、エンクレーブ対応列暗号化キーを使用して暗号化されたデータベース列です。An enclave-enabled column is a database column encrypted with an enclave-enabled column encryption key. エンクレーブ対応列に使用できる機能は、列が使用している暗号化の種類によって異なります。The functionality available for an enclave-enabled column depends on the encryption type the column is using.

  • 決定論的な暗号化: 決定論的な暗号化を使用するエンクレーブ対応列はインプレース暗号化をサポートしていますが、セキュリティで保護されたエンクレーブ内の他の操作はサポートされていません。Deterministic encryption - Enclave-enabled columns using deterministic encryption support in-place encryption, but no other operations inside the secure enclave. 等価比較はサポートされていますが、エンクレーブの外部の暗号文と比較することによって実行されます。Equality comparison is supported, but it is performed by comparing the ciphertext outside of the enclave.
  • ランダム化された暗号化: ランダム化された暗号化を使用するエンクレーブ対応列は、セキュリティで保護されたエンクレーブ内で、インプレース暗号化と高度な計算をサポートしています。Randomized encryption - Enclave-enabled columns using randomized encryption support in-place encryption as well as rich computations inside the secure enclave. サポートされている高度な計算は、パターン マッチングと等価比較を含む比較演算子です。The supported rich computations are pattern matching and comparison operators, including equality comparison.

暗号化の種類については、「Always Encrypted による暗号化」を参照してください。For more information about encryption types, see Always Encrypted Cryptography.

次の表は、列がエンクレーブ対応列暗号化キーと暗号化の種類を使用するかどうかに応じて、暗号化列に使用できる機能をまとめたものです。The following table summarizes the functionality available for encrypted columns, depending on whether the columns use enclave-enabled column encryption keys and an encryption type.

操作Operation 列はエンクレーブ対応ではないColumn is NOT enclave-enabled 列はエンクレーブ対応ではないColumn is NOT enclave-enabled 列はエンクレーブ対応Column is enclave-enabled 列はエンクレーブ対応Column is enclave-enabled
ランダム化された暗号化Randomized encryption 決定論的な暗号化Deterministic encryption ランダム化された暗号化Randomized encryption 決定論的な暗号化Deterministic encryption
インプレース暗号化In-place encryption サポートされていませんNot Supported サポートされていませんNot Supported SupportedSupported SupportedSupported
等価比較Equality comparison サポートされていませんNot Supported エンクレーブの外部でサポートされますSupported outside of the enclave (エンクレーブの内部で) サポートされますSupported (inside the enclave) エンクレーブの外部でサポートされますSupported outside of the enclave
等価かどうか以外の比較演算子Comparison operators beyond equality サポートされていませんNot Supported サポートされていませんNot Supported SupportedSupported サポートされていませんNot Supported
LIKELIKE サポートされていませんNot Supported サポートされていませんNot Supported SupportedSupported サポートされていませんNot Supported

インプレース暗号化では、エンクレーブ内の次の操作が含まれています。In-place encryption includes support for the following operations inside the enclave:

  • 既存の列に格納されているデータの最初の暗号化。Initial encryption of data stored in an existing column.

  • 次の例のように、列内の既存のデータを再暗号化します。Re-encrypting existing data in a column, for example:

    • 列暗号化キーを交換します (新しいキーで列を再暗号化します)。Rotating the column encryption key (re-encrypting the column with a new key).
    • 暗号化の種類の変更Changing the encryption type.
  • 暗号化された列に格納されているデータを復号化します (列をプレーンテキスト列に変換します)。Decrypting data stored in an encrypted column (converting the column into a plaintext column).

インプレース暗号化を可能にするには、暗号化操作に関連する 1 つまたは複数の列暗号化キーをエンクレーブ対応にする必要があります。For in-place encryption to be possible, the column encryption key (or keys), involved in the cryptographic operations, must be enclave-enabled:

  • 最初の暗号化: 暗号化される列の列暗号化キーは、エンクレーブ対応にする必要があります。Initial encryption: the column encryption key for the column being encrypted must be enclave-enabled.
  • 再暗号化: 現在の列暗号化キーとターゲットの列暗号化キー (現在のキーと異なる場合) の両方をエンクレーブ対応にする必要があります。Re-encryption: both the current and the target column encryption key (if different than the current key) must be enclave-enabled.
  • 復号化: 列の現在の列暗号化キーはエンクレーブ対応にする必要があります。Decryption: the current column encryption key of the column must be enclave-enabled.

ランダム化された暗号化を使用してエンクレーブ対応の列でインデックスを作成するIndexes on Enclave-enabled Columns using Randomized Encryption

ランダム化された暗号化を使用してエンクレーブ対応の列で非クラスター化インデックスを作成し、高度なクエリの実行を高速化できます。You can create nonclustered indexes on enclave-enabled columns using randomized encryption to make rich queries run faster. ランダム化された暗号化を使用して暗号化された列のインデックスで機密データが漏えいしないようにし、同時に、エンクレーブ内でのクエリの処理に便利なように、インデックス データ構造 (B ツリー) 内のキーの値は、プレーンテキストの値に基づいて暗号化され、並べ替えられます。To ensure an index on a column encrypted using randomized encryption doesn't leak sensitive data and, at the same time, it's useful for processing queries inside the enclave, the key values in the index data structure (B-tree) are encrypted and sorted based on their plaintext values. SQL Server エンジン内のクエリ Executor では、エンクレーブ内での計算のために暗号化された列のインデックスが使われるときに、インデックスを検索して列に格納されている特定の値が探索されます。When the query executor in the SQL Server Engine uses an index on an encrypted column for computations inside the enclave, it searches the index to look up specific values stored in the column. 各検索には、複数の比較が含まれる場合があります。Each search may involve multiple comparisons. クエリ Executor では各比較がエンクレーブにデリゲートされ、エンクレーブでは列に格納されている値と比較対象の暗号化されたインデックス キーの値が復号化されて、プレーンテキストで比較が実行された後、比較の結果が Executor に返されます。The query executor delegates each comparison to the enclave, which decrypts a value stored in the column and the encrypted index key value to be compared, it performs the comparison on plaintext and it returns the result of the comparison to the executor. SQL Server でのインデックス作成の処理方法に関する、Always Encrypted に固有ではない一般的な情報については、「クラスター化インデックスと非クラスター化インデックスの概念」をご覧ください。For general information, not specific to Always Encrypted, on how indexing in SQL Server works, see Clustered and Nonclustered Indexes Described.

ランダム化された暗号化を使用するエンクレーブ対応の列でのインデックスには暗号化されたインデックスのキー値が格納されますが、値はプレーンテキストに基づいて格納されるため、SQL Server エンジンでは、次のようなインデックスの作成または更新に関連するすべての操作に対して、エンクレーブを使用する必要があります。Because an index on an enclave-enabled column using randomized encryption stores the encrypted index key values while the values are sorted based on plaintext, SQL Server Engine must use the enclave for any operation that involves creating or updating an index, including:

  • インデックスの作成または再構築。Creating or rebuilding an index.
  • (インデックス付け/暗号化された列が含まれる) テーブルの行の挿入、更新、または削除。インデックスのインデックス キーの挿入または削除がトリガーされます。Inserting, updating, or deleting a row in the table (containing an indexed/encrypted column), which triggers inserting or/and removing an index key to/from the index.
  • インデックスの整合性のチェックが含まれる DBCC コマンドの実行。たとえば、DBCC CHECKDB (Transact-SQL)DBCC CHECKTABLE (Transact-SQL)Running DBCC commands that involve checking the integrity of indexes, for example DBCC CHECKDB (Transact-SQL) or DBCC CHECKTABLE (Transact-SQL).
  • SQL Server でインデックスへの変更を元に戻す必要がある場合の、データベースの復旧 (たとえば、SQL Server が失敗して再起動した後) (詳細については、以下を参照してください)。Database recovery (for example, after SQL Server fails and restarts), if SQL Server needs to undo any changes to the index (see more details below).

上記のすべての操作では、インデックス キーを復号化できるように、エンクレーブがインデックス付き列の列暗号化キーを持っている必要があります。All the above operations require the enclave has the column encryption key for the indexed column, so that it can decrypt the index keys. 一般に、エンクレーブでは、2 つの方法のいずれかで列暗号化キーを取得できます。In general, the enclave can obtain a column encryption key in one of two ways:

  • インデックスに対する操作を呼び出したクライアント アプリケーションから直接 (上記の概要説明を参照)。Directly from the client application that invoked the operation on the index, as described in the introduction above. この方法では、アプリケーションまたはユーザーは、インデックス付きの列を保護している、列マスター キーと列暗号化キーにアクセスできる必要があります。This method requires the application or the user to have access to the column master key and the column encryption key, protecting the indexed column. アプリケーションでは、接続に対して Always Encrypted を有効にして、データベースに接続する必要があります。The application must connect to the database with Always Encrypted enabled for the connection.
  • 列暗号化キーのキャッシュから。From the cache of column encryption keys. エンクレーブでは、エンクレーブ内にあり、したがって外部からアクセスできないキャッシュに、前のクエリで使用されたキーが格納されます。The enclave stores the keys, used in previous queries, in the cache that is located inside the enclave, and is therefore inaccessible from the outside. アプリケーションで、必要な列暗号化キーを直接提供しないで、インデックスの操作をトリガーした場合、エンクレーブによってキャッシュ内のキーが検索されます。If an application triggers an operation on an index without providing the required column encryption key directly, the enclave looks up the key in the cache. キャッシュでキーが見つかると、それがエンクレーブでの操作に使われます。If the enclave finds the key in the cache, it uses it for the operation. この方法では、DBA は、プレーンテキストで暗号化キーやデータにアクセスすることなく、インデックスを管理し、特定のデータ クレンジング操作 (たとえば、暗号化された列にインデックスが含まれるテーブルからの行の削除) を実行できます。This method allows DBAs to manage indexes and perform certain data cleansing operations (for example, removing a row from a table containing an index on an encrypted column), without having access to the cryptographic keys or the data in plaintext. この方法のアプリケーションでは、接続の Always Encrypted を有効にしないで、データベースに接続する必要があります。This method requires the application connects to the database without Always Encrypted enabled for the connection.

ランダム化された暗号化を使用し、エンクレーブ対応ではない列でのインデックスの作成は、やはりサポートされていません。Creating indexes on columns that use randomized encryption and are not enclave-enabled remains unsupported.

データベース復旧Database Recovery

SQL Server のインスタンスで障害が発生した場合、そのデータベースは、完了しなかったトランザクションによる変更がデータ ファイルに含まれ状態のままになる可能性があります。If an instance of SQL Server fails, its databases may be left in a state where the data files may contain some modifications from incomplete transactions. インスタンスが起動されると、データベース復旧と呼ばれるプロセスが実行されます。このプロセスでは、トランザクション ログで見つかったすべての未完了のトランザクションがロールバックされて、データベースの整合性が保持されます。When the instance is started, it runs a process called database recovery, which involves rolling back every incomplete transaction found in the transaction log to make sure the integrity of the database is preserved. 未完了のトランザクションによってインデックスの変更が行われた場合、それらの変更も元に戻す必要があります。If an incomplete transaction made any changes to an index, those changes also need to be undone. たとえば、インデックス内の一部のキー値は、削除するか、再挿入する必要があります。For example, some key values in the index may need to be removed or reinserted.

重要

ランダム化された暗号化を使用して暗号化されているエンクレーブ対応の列で最初のインデックスを作成するに、データベースに対して高速データベース復旧 (ADR) を有効にすることを強くお勧めします。Microsoft strongly recommends enabling Accelerated database recovery (ADR) for your database, before creating the first index on an enclave-enabled column encrypted with randomized encryption.

従来のデータベース復旧プロセス (ARIES 復旧モデルに従うもの) では、インデックスに対する変更を元に戻すには、アプリケーションが列の列暗号化キーをエンクレーブに提供するまで SQL Server は待機する必要があり、長くかかることがあります。With the traditional database recovery process (that follows the ARIES recovery model), to undo a change to an index, SQL Server needs to wait until an application provides the column encryption key for the column to the enclave, which can take a long time. ADR では、エンクレーブ内のキャッシュで列暗号化キーを使用できないために遅延する必要がある元に戻す操作の数が、劇的に減少します。ADR dramatically reduces the number of undo operations that must be deferred because a column encryption key is not available in the cache inside the enclave. その結果、新しいトランザクションがブロックされる可能性が最小限になり、データベースの可用性が大幅に向上します。Consequently, it substantially increases the database availability by minimizing a chance for a new transaction to get blocked. ADR を有効にしても、SQL Server ではやはり古いデータ バージョンのクリーンアップを完了するために列暗号化キーが必要になる場合がありますが、データベースまたはユーザーのトランザクションの可用性に影響を与えないバックグラウンド タスクとして行われます。With ADR enabled, SQL Server still may need a column encryption key to complete cleaning up old data versions but it does that as a background task that does not impact the availability of the database or user transactions. ただし、列暗号化キーがないためにクリーンアップ操作が失敗したことを示すエラー メッセージが、エラー ログに記録されることがあります。You may, however, see error messages in the error log, indicating failed cleanup operations due to a missing column encryption key.

決定論的な暗号化を使用してエンクレーブ対応の列でインデックスを作成するIndexes on Enclave-enabled Columns using Deterministic Encryption

決定論的な暗号化を使用する列でのインデックスは、列がエンクレーブ対応かどうかに関係なく、(プレーンテキストではなく) 暗号化テキストに基づいて並べ替えられます。An index on a column using deterministic encryption are sorted based on ciphertext (not plaintext), regardless if the column is enclave-enabled or not.

セキュリティに関する考慮事項Security Considerations

セキュリティで保護されたエンクレーブが設定された Always Encrypted に対しては、次のセキュリティに関する考慮事項が適用されます。The following security considerations apply to Always Encrypted with secure enclaves.

  • エンクレーブ内のデータのセキュリティは、構成証明プロトコルと構成証明サービスに依存します。The security of your data inside the enclave depends on an attestation protocol and an attestation service. そのため、構成証明サービスと、構成証明サービスによって適用される構成証明ポリシーを、信頼できる管理者が管理する必要があります。Therefore, you need to ensure the attestation service and attestation policies, the attestation service enforces, are managed by a trusted administrator. また、通常、構成証明サービスではさまざまなポリシーと構成証明プロトコルがサポートされており、そのうちの一部は、エンクレーブとその環境の最小限の検証を実行する、テストと開発用に設計されたものです。Also, attestation services typically support different policies and attestation protocols, some of which perform minimal verification of the enclave and its environment, and are designed for testing and development. お使いの構成証明サービスに固有のガイドラインに厳密に従って、運用環境の配置には推奨される構成とポリシーを使うようにしてください。Closely follow the guidelines specific to your attestation service to ensure you are using the recommended configurations and policies for your production deployments.
  • エンクレーブ対応の CEK でランダム化された暗号化を使用して列を暗号化すると、列による範囲比較のサポートのため、列に格納されたデータの順序がリークする可能性があります。Encrypting a column using randomized encryption with an enclave-enabled CEK may result in leaking the order of data stored in the column, as such columns support range comparisons. たとえば、従業員の給与が含まれる暗号化された列にインデックスがある場合、悪意のある DBA はインデックスをスキャンして暗号化された給与の最大値を検索し、給与が最高の個人を特定できます (ユーザーの名前は暗号化されていないものとします)。For example, if an encrypted column, containing employee salaries, has an index, a malicious DBA could scan the index to find the maximum encrypted salary value and identify a person with the maximum salary (assuming the name of the person is not encrypted).
  • Always Encrypted を使用して、DBA による不正アクセスから機密データを保護する場合は、列マスター キーまたは列暗号化キーを DBA と共有しないでください。If you use Always Encrypted to protect sensitive data from unauthorized access by DBAs, do not share the column master keys or column encryption keys with the DBAs. DBA は、キーに直接アクセスできなくても、エンクレーブ内の列暗号化キーのキャッシュを利用して、暗号化された列のインデックスを管理できます。A DBA can manage indexes on encrypted columns without having direct access to the keys, by leveraging the cache of column encryption keys inside the enclave.

AlwaysOn とデータベース移行に関する考慮事項Considerations for AlwaysOn and Database Migration

エンクレーブを使用するクエリをサポートするために必要な AlwaysOn 可用性グループを構成する場合は、可用性グループ内のデータベースをホストするすべての SQL Server インスタンスで、セキュリティで保護されたエンクレーブが設定された Always Encrypted をサポートし、エンクレーブを構成する必要があります。When configuring an AlwaysOn availability group that is required to support queries using enclaves, you need to ensure that all SQL Server instances hosting the databases in the availability group support Always Encrypted with secure enclaves and have an enclave configured. プライマリ データベースではエンクレーブがサポートされていても、セカンダリ レプリカではサポートされていない場合、セキュリティで保護されたエンクレーブが設定された Always Encrypted の機能を使用しようとするクエリは失敗します。If the primary database supports enclaves, but a secondary replica does not, any query that attempts to use the functionality of Always Encrypted with secure enclaves will fail.

エンクレーブが構成されていない SQL Server インスタンスで、セキュリティで保護されたエンクレーブが設定された Always Encrypted の機能を使用するデータベースのバックアップ ファイルを復元すると、復元操作は成功し、エンクレーブに依存しないすべての機能が使用可能になります。When you restore a backup file of a database that uses the functionality of Always Encrypted with secure enclaves on a SQL Server instance that doesn't have the enclave configured, the restore operation will succeed and all the functionality that doesn't rely on the enclave will be available. しかし、エンクレーブ機能を使用する後続のクエリは失敗し、ランダム化された暗号化を使用するエンクレーブ対応の列のインデックスは無効になります。However, any subsequent queries using the enclave functionality will fail, and indexes on enclave-enabled columns using randomized encryption will become invalid. エンクレーブが構成されていないインスタンスで、セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用するデータベースをアタッチしたときも、同じようになります。The same applies when you attach a database using Always Encrypted with secure enclaves on the instance that doesn't have the enclave configured.

ランダム化された暗号化を使用するエンクレーブ対応の列のインデックスがデータベースに含まれる場合は、データベースのバックアップを作成する前に、データベースで高速データベース復旧 (ADR) を有効にしてください。If your database contains indexes on enclave-enabled columns using randomized encryption, make sure you enable Accelerated database recovery (ADR) in the database before creating a database backup. ADR では、データベースを復元した後すぐに、インデックスも含めて、データベースを使用できることが保証されます。ADR will ensure the database, including the indexes, is available immediately after you restore the database. 詳しくは、「データベース復旧」をご覧ください。For more information, see Database Recovery.

bacpac ファイルを使ってデータベースを移行するときは、bacpac ファイルを作成する前に、ランダム化された暗号化を使用するエンクレーブ対応の列のすべてのインデックスを削除する必要があります。When you migrate your database using a bacpac file, you need to make sure you drop all indexes enclave-enabled columns using randomized encryption before creating the bacpac file.

既知の制限事項Known Limitations

セキュリティで保護されたエンクレーブによって、Always Encrypted の機能が強化されます。Secure enclaves enhance the functionality of Always Encrypted. 次の機能は、現在、エンクレーブ対応の列に対してサポートされていますThe following capabilities are now supported for enclave-enabled columns:

  • インプレース暗号操作。In-place cryptographic operations.
  • ランダム化された暗号化を使用して暗号化された列での、パターン マッチング (LIKE) および比較演算子。Pattern matching (LIKE) and comparison operators on column encrypted using randomized encryption.

    注意

    上記の操作は、バイナリ 2 並べ替え順序 (BIN2 照合順序) による照合順序を使用する文字列型の列に対してサポートされます。The above operations are supported for character string columns that use collations with a binary2 sort order (BIN2 collations). BIN2 以外の照合順序を使用する文字列型の列は、ランダム化された暗号化およびエンクレーブ対応の列暗号化キーを使用して、暗号化できます。Character string columns using non-BIN2 collations can be encrypted using randomized encryption and enclave-enabled column encryption keys. ただし、このような列に対して有効な唯一の新機能はインプレース暗号化です。However, the only new functionality that is enabled for such columns is in-place encryption.

  • ランダム化された暗号化を使用する列での非クラスター化インデックスの作成。Creating nonclustered indexes on columns using randomized encryption.
  • ランダム化された暗号化を使用する列に対する LIKE 述語と比較演算子を含む式を使用する計算列。Computed columns using expressions containing the LIKE predicate and comparison operators on columns using randomized encryption.

機能の詳細」で (セキュリティで保護されたエンクレーブが設定されていない) Always Encrypted について示されている (上記の機能強化により対処されない) 他のすべての制限事項は、セキュリティで保護されたエンクレーブが設定された Always Encrypted にも適用されます。All other limitations (not addressed by the above enhancements) that are listed for Always Encrypted (without secure enclaves) at Feature Details also apply to Always Encrypted with secure enclaves.

次の制限事項は、セキュリティで保護されたエンクレーブが設定された Always Encrypted に固有のものです。The following limitations are specific to Always Encrypted with secure enclaves:

  • ランダム化された暗号化を使用するエンクレーブ対応の列では、クラスター化インデックスを作成できません。Clustered indexes can't be created on enclave-enabled columns using randomized encryption.
  • ランダム化された暗号化を使用するエンクレーブ対応の列を、主キー列にすることはできず、外部キー制約または一意キー制約によって参照することはできません。Enclave-enabled columns using randomized encryption can't be primary key columns and cannot be referenced by foreign key constraints or unique key constraints.
  • ランダム化された暗号化を使用するエンクレーブ対応の列でのハッシュ結合とマージ結合はサポートされていません。Hash joins and merged joins on enclave-enabled columns using randomized encryption are not supported. 入れ子になったループ結合 (インデックスを使用、使用可能な場合) のみがサポートされます。Only nested loop joins (using indexes, if available) are supported.
  • (暗号化の後でラージ オブジェクトになる) 次のデータ型のいずれかを使用するクエリ パラメーターを持つ LIKE 演算子または比較演算子を含むクエリでは、インデックスは無視され、テーブル スキャンが実行されます。Queries with the LIKE operator or a comparison operator that has a query parameter using one of the following data types (that become large objects after encryption) ignore indexes and perform table scans.
    • nchar[n]、nvarchar[n] (n が 3967 より大きい場合)。nchar[n] and nvarchar[n], if n is greater than 3967.
    • char[n]、varchar[n]、binary[n]、varbinary[n] (n が 7935 より大きい場合)。char[n], varchar[n], binary[n], varbinary[n], if n is greater than 7935.
  • 同じコード ページ内の照合順序および NULL 値の許容の変更を除き、インプレース暗号化操作を、列メタデータの他の変更と組み合わせることはできません。In-place cryptographic operations cannot be combined with any other changes of column metadata, except changing a collation within the same code page and nullability. たとえば、1 つの ALTER TABLE または ALTER COLUMN Transact-SQL ステートメントで列を暗号化、再暗号化、または復号化し、さらに列のデータ型を変更することはできません。For example, you cannot encrypt, re-encrypt, or decrypt a column AND change a data type of the column in a single ALTER TABLE or ALTER COLUMN Transact-SQL statement. 2 つの異なるステートメントを使用します。Use two separate statements.
  • インメモリ テーブルの列にエンクレーブ対応キーを使用することは、サポートされていません。Using enclave-enabled keys for columns in in-memory tables isn't supported.
  • エンクレーブ対応列マスター キーを格納するためにサポートされるキー ストアは、Windows 証明書ストアと Azure Key Vault のみです。The only supported key stores for storing enclave-enabled column master keys are Windows Certificate Store and Azure Key Vault.

SQL Server 2019 プレビューSQL Server 2019 preview には以下の制限事項が適用されますが、対応予定のロードマップ上にあります。The following limitations apply to SQL Server 2019 プレビューSQL Server 2019 preview, but are on the roadmap to be addressed:

  • ランダム化された暗号化を使用するエンクレーブ対応の列に対する統計の作成は、サポートされていません。Creating statistics for enclave-enabled columns using randomized encryption is not supported.
  • セキュリティで保護されたエンクレーブが設定された Always Encrypted をサポートする唯一のクライアント ドライバーは、.NET Framework 4.7.2 内の NET Framework Data Provider for SQL Server (ADO.NET) です。The only client driver supporting Always Encrypted with secure enclaves is .NET Framework Data Provider for SQL Server (ADO.NET) in .NET Framework 4.7.2. ODBC/JDBC はサポートされていません。ODBC/JDBC isn't supported.
  • セキュリティで保護されたエンクレーブが設定された Always Encrypted のツールのサポートは、現在のところ不完全です。Tooling support for Always Encrypted with secure enclaves is currently incomplete. 特に次の点に注意してください。In particular:
    • エンクレーブ対応のキーが含まれるデータベースのインポート/エクスポートは、サポートされていません。Import/exporting databases containing enclave-enabled keys is not supported.
    • ALTER TABLE Transact-SQL ステートメントを使用してインプレース暗号化操作をトリガーするには、SSMS でクエリ ウィンドウを使用してステートメントを発行するか、ステートメントを発行する独自のプログラムを作成する必要があります。To trigger an in-place cryptographic operation via an ALTER TABLE Transact-SQL statement, you need to issue the statement using a query window in SSMS, or you can write your own program that issues the statement. SqlServer PowerShell モジュールの Set-SqlColumnEncryption コマンドレットと SQL Server Management Studio の Always Encrypted ウィザードは、インプレース暗号化をまだサポートしていません。現在、どちらのツールも、操作に使用される列暗号化キーがエンクレーブ対応であっても、暗号化操作のためにデータベースからデータを移動します。The Set-SqlColumnEncryption cmdlet in the SqlServer PowerShell module and the Always Encrypted wizard in SQL Server Management Studio do not support in-place encryption yet - both tools currently move the data out of the database for cryptographic operations, even if the column encryption keys used for the operations are enclave-enabled.
  • インデックスの整合性のチェックまたはインデックスの更新を行う DBCC コマンドは、サポートされていません。DBCC commands checking the integrity of indexes or updating indexes are not supported.
  • テーブルを作成するときの、暗号化された列でのインデックスの作成 (CREATE TABLE を使用)。Creating indexes on encrypted columns at the time of creating the table (via CREATE TABLE). 暗号化された列のインデックスは、CREATE INDEX を使って別に作成する必要があります。You need to create an index on an encrypted column separately via CREATE INDEX.

次の手順Next steps