セキュア エンクレーブを使用する Always EncryptedAlways Encrypted with secure enclaves

適用対象:Applies to: はいSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Windows のみ はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database適用対象:Applies to: はいSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Windows only はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database

セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用すると、インプレース暗号化と豊富な機密クエリが有効になることで、Always Encrypted の機密コンピューティング機能が拡張されます。Always Encrypted with secure enclaves expands confidential computing capabilities of Always Encrypted by enabling in-place encryption and richer confidential queries. セキュリティで保護されたエンクレーブが設定された Always Encrypted は、SQL Server 2019 (15.x)SQL Server 2019 (15.x)Azure SQL データベースAzure SQL Database (プレビュー) で利用できます。Always Encrypted with secure enclaves is available in SQL Server 2019 (15.x)SQL Server 2019 (15.x) and in Azure SQL データベースAzure SQL Database (in preview).

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

この記事で説明されている拡張機能を使用しないと、データは、Always Encrypted により、クライアント側で暗号化され、データベース エンジンDatabase Engine内でデータまたは対応する暗号化キーをプレーンテキストで表示 "できない" ようにすることで保護されます。Without the enhancements discussed in this article, Always Encrypted protects 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 データベース エンジンDatabase Engine. その結果、データベース内の暗号化された列に対する機能が大幅に制限されます。As a result, the functionality on encrypted columns inside the database is severely restricted. 暗号化されたデータに対してデータベース エンジンDatabase Engineで実行できる操作は、等価比較のみです (決定論的暗号化でのみ使用できます)。The only operations the データベース エンジンDatabase Engine can perform on encrypted data are equality comparisons (only available with deterministic encryption). 暗号化操作 (最初のデータ暗号化や、キーのローテーション) や高度なクエリ (パターン マッチングなど) などの他のすべての操作は、データベース内ではサポートされていません。All other operations, including cryptographic operations (initial data encryption or key rotation) and richer queries (for example, pattern matching) are not supported inside the database. ユーザーがクライアント側でこのような操作を実行するには、データベースの外部にデータを移動する必要があります。Users need to move their 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 some computations on plaintext data inside a secure enclave on the server side. セキュリティで保護されたエンクレーブは、データベース エンジンDatabase Engine プロセス内のメモリの保護された領域です。A secure enclave is a protected region of memory within the データベース エンジンDatabase Engine process. セキュリティで保護されたエンクレーブは、データベース エンジンDatabase Engineの他の部分や、ホスティング マシン上の他のプロセスからは、不透明なボックスとして認識されます。The secure enclave appears as an opaque box to the rest of the データベース エンジンDatabase Engine 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. これらの特徴により、セキュリティで保護されたエンクレーブは "高信頼実行環境" になり、データの機密性を損なうことなく、プレーンテキストで暗号化キーと機密データに安全にアクセスできます。These properties make the secure enclave a trusted execution environment that can safely access cryptographic keys and sensitive data in plaintext, without compromising data confidentiality.

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

データ フロー (data flow)

アプリケーションによって送信された Transact-SQL ステートメントを解析するときは、データベース エンジンDatabase Engineにより、セキュリティで保護されたエンクレーブを使用する必要がある暗号化されたデータに対する操作がステートメントに含まれているかどうかが判断されます。When parsing a Transact-SQL statement submitted by an application, the データベース エンジンDatabase Engine determines if the statement contains any operations on encrypted data that require the use of the secure enclave. そのようなステートメントの場合:For such statements:

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

  • ステートメントを処理するときは、データベース エンジンDatabase Engineにより、暗号化された列に対する暗号化操作または計算が、セキュリティで保護されたエンクレーブに委任されます。When processing the statement, the データベース エンジンDatabase Engine delegates cryptographic operations or computations on encrypted columns to the secure enclave. 必要に応じて、エンクレーブによりデータが解読され、プレーンテキストで計算が実行されます。If needed, the enclave decrypts the data and performs computations on plaintext.

ステートメントの処理の間、データと列暗号化キーのどちらも、セキュリティで保護されたエンクレーブの外部にあるデータベース エンジンDatabase Engineにおいて、プレーンテキストで公開されることはありません。During statement processing, both the data and the column encryption keys are not exposed in plaintext in the データベース エンジンDatabase Engine outside of the secure enclave.

サポートされているエンクレーブ テクノロジSupported enclave technologies

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

Azure SQL データベースAzure SQL Database では、セキュリティで保護されたエンクレーブが設定された Always Encrypted により、Intel Software Guard Extensions (Intel SGX) のエンクレーブが使用されます。In Azure SQL データベースAzure SQL Database, Always Encrypted with secure enclaves uses Intel Software Guard Extensions (Intel SGX) enclaves. Intel SGX は、DC シリーズのハードウェア構成を使用するデータベースでサポートされる、ハードウェアベースの信頼された実行環境テクノロジです。Intel SGX is a hardware-based trusted execution environment technology supported in databases that use the DC-series hardware configuration.

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

データベース エンジンDatabase Engine内のセキュリティで保護されたエンクレーブからは、機密データと列暗号化キーにプレーンテキストでアクセスできます。The secure enclave inside the データベース エンジンDatabase Engine can access sensitive data and the column encryption keys in plaintext. このため、エンクレーブ計算が含まれるステートメントがデータベース エンジンDatabase Engineに送信される前に、アプリケーション内のクライアント ドライバーにより、セキュリティで保護されたエンクレーブが正規の VBS または SGX エンクレーブであること、および、セキュリティで保護されたエンクレーブ内で実行されるコードが、インプレース暗号化および機密クエリでサポートされる操作のための Always Encrypted の暗号化アルゴリズムが実装されている、正規の Always Encrypted ライブラリであることが、確認される必要があります。Therefore, before submitting a statement that involves enclave computations to the データベース エンジンDatabase Engine, the client driver inside the application must verify the secure enclave is a genuine VBS or SGX enclave and the code running inside the secure enclave is the genuine Always Encrypted library that implements Always Encrypted cryptographic algorithms for in-place encryption and operations supported in confidential queries.

エンクレーブを検証するプロセスは、エンクレーブの構成証明 と呼ばれ、アプリケーション内のクライアント ドライバーと、外部の構成証明サービスに接続するデータベース エンジンDatabase Engineの両方が含まれます。The process of verifying the enclave is called enclave attestation, and it involves both a client driver within the application and データベース エンジンDatabase Engine contacting an external attestation service. 構成証明プロセスの詳細は、エンクレーブの種類 (VBS または SGX) と、構成証明サービスによって異なります。The specifics of the attestation process depend on the type of the enclave (VBS or SGX) and the attestation service.

SQL Server 2019 (15.x)SQL Server 2019 (15.x) での VBS のセキュリティで保護されたエンクレーブに対する構成証明プロセスは Windows Defender System Guard ランタイム構成証明であり、構成証明サービスとしてホスト ガーディアン サービス (HGS) が必要です。The attestation process for VBS secure enclaves in SQL Server 2019 (15.x)SQL Server 2019 (15.x) is Windows Defender System Guard runtime attestation, which requires Host Guardian Service (HGS) as an attestation service.

Azure SQL データベースAzure SQL Database での Intel SGX エンクレーブの構成証明には、Microsoft Azure Attestation が必要です。The attestation of Intel SGX enclaves in Azure SQL データベースAzure SQL Database requires Microsoft Azure Attestation.

注意

SQL Server 2019 (15.x)SQL Server 2019 (15.x) では、Microsoft Azure Attestation はサポートされていません。does not support Microsoft Azure Attestation. SQL Server 2019 (15.x)SQL Server 2019 (15.x) での VBS エンクレーブに対してサポートされている唯一の構成証明ソリューションは、ホスト ガーディアン サービスだけです。Host Guardian Service is the only attestation solution supported for VBS enclaves in SQL Server 2019 (15.x)SQL Server 2019 (15.x).

サポートされるクライアント ドライバーSupported client drivers

セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用するには、アプリケーションでこの機能をサポートするクライアント ドライバーを使用する必要があります。To use Always Encrypted with secure enclaves, an application must use a client driver that supports the feature. エンクレーブの計算とエンクレーブの構成証明が有効になるように、アプリケーションとクライアント ドライバーを構成します。Configure the application and the client driver to enable enclave computations and enclave attestation. サポートされているクライアント ドライバーの一覧などの詳細については、「Always Encrypted を使用したアプリケーションの開発」を参照してください。For details, including the list of supported client drivers, see Develop applications using Always Encrypted.

用語Terminology

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

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

  • エンクレーブ対応の列マスター キー - データベース内の列マスター キー メタデータ オブジェクトで 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. 詳細については、「CREATE COLUMN MASTER KEY (Transact-SQL)」を参照してくださいFor more information, see CREATE COLUMN MASTER KEY (Transact-SQL)
  • エンクレーブ対応列暗号化キー: エンクレーブ対応列マスター キーで暗号化された列暗号化キーです。Enclave-enabled column encryption key - a column encryption key that is encrypted with an enclave-enabled column master key. セキュリティで保護されたエンクレーブ内での計算に使用できるのは、エンクレーブ対応の列暗号化キーだけです。Only enclave-enabled column encryption keys can be used for computations inside the secure enclave.

詳細については、「セキュリティで保護されたエンクレーブが設定された Always Encrypted のキーの管理」を参照してください。For more information, see Manage keys for Always Encrypted with secure enclaves.

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

エンクレーブ対応列は、エンクレーブ対応列暗号化キーを使用して暗号化されたデータベース列です。An enclave-enabled column is a database column encrypted with an enclave-enabled column encryption key.

エンクレーブ対応列のための機密コンピューティング機能Confidential computing capabilities for enclave-enabled columns

セキュリティで保護されたエンクレーブが設定された Always Encrypted の 2 つの主な利点は、インプレース暗号化と豊富な機密クエリです。The two key benefits of Always Encrypted with secure enclaves are in-place encryption and rich confidential queries.

インプレース暗号化In-place encryption

インプレース暗号化を使用すると、データをデータベースの外部に移動することなく、セキュリティで保護されたエンクレーブ内でデータベース列の暗号化操作を行うことができます。In-place encryption allows cryptographic operations on database columns inside the secure enclave, without moving the data outside of the database. インプレース暗号化により、暗号化のパフォーマンスと信頼性が向上します。In-place encryption improves the performance and the reliability of encryption. インプレース暗号化は、ALTER TABLE (Transact-SQL) ステートメントを使用して実行できます。You can perform in-place encryption using the ALTER TABLE (Transact-SQL) statement.

インプレースでサポートされる暗号化操作は次のとおりです。The cryptographic operations supported in-place are:

  • エンクレーブ対応の列暗号化キーによるプレーンテキストの列の暗号化。Encrypting a plaintext column with an enclave-enabled column encryption key.
  • 次のことを目的とする、暗号化されたエンクレーブ対応列の再暗号化:Re-encrypting an encrypted enclave-enabled column to:
    • 列暗号化キーのローテーション - 新しいエンクレーブ対応列暗号化キーを使用して列を再暗号化します。Rotate a column encryption key - re-encrypt the column with a new enclave-enabled column encryption key.
    • エンクレーブ対応列の暗号化の種類の変更 (たとえば、決定論的からランダム化に)。Change the encryption type of an enclave-enabled column, for example, from deterministic to randomized.
  • エンクレーブ対応列に格納されているデータの解読 (列からプレーンテキスト列への変換)。Decrypting data stored in an enclave-enabled column (converting the column into a plaintext column).

暗号化操作に含まれる列暗号化キーがエンクレーブ対応である限り、決定論的とランダム化の両方の暗号化で、インプレース暗号化を使用できます。In-place encryption is allowed with both deterministic and randomized encryption, as long as the column encryption keys involved in a cryptographic operation are enclave-enabled.

機密クエリConfidential queries

機密クエリは、セキュリティで保護されたエンクレーブ内で実行されるエンクレーブ対応列の操作を伴う DML クエリです。Confidential queries are DML queries that involve operations on enclave-enabled columns performed inside the secure enclave.

セキュリティで保護されたエンクレーブでサポートされる操作は次のとおりです。The operations supported inside the secure enclaves are:

操作Operation SQL Server 2019 (15.x)SQL Server 2019 (15.x) Azure SQL データベースAzure SQL Database
比較演算子Comparison Operators サポートされていますSupported サポートされていますSupported
BETWEEN (Transact-SQL)BETWEEN (Transact-SQL) サポートされていますSupported サポートされていますSupported
IN (Transact-SQL)IN (Transact-SQL) サポートされていますSupported サポートされていますSupported
LIKE (Transact-SQL)LIKE (Transact-SQL) サポートされていますSupported サポートされていますSupported
DISTINCTDISTINCT サポートされていますSupported サポートされていますSupported
結合Joins 入れ子になったループ結合のみがサポートされますOnly nested loop joins supported サポートされていますSupported
SELECT - ORDER BY 句 (Transact-SQL)SELECT - ORDER BY Clause (Transact-SQL) サポートされていませんNot supported サポートされていますSupported
SELECT - GROUP BY- Transact-SQLSELECT - GROUP BY- Transact-SQL サポートされていませんNot supported サポートされていますSupported

注意

セキュリティで保護されたエンクレーブでの上記の操作は、ランダム化された 暗号化を使用するエンクレーブ対応列でのみサポートされており、決定論的な暗号化ではサポートされていません。The above operations are supported in secure enclaves only on enclave-enabled columns using randomized encryption, and not deterministic encryption. 決定論的な暗号化を使用する列でサポートされている計算が等価比較だけであることは変わらず、列がエンクレーブ対応かどうかにかかわらず、エンクレーブの外部で暗号文を比較することによって実行されます。Equality comparison remains the only computation supported on columns using deterministic encryption, and it's performed by comparing the ciphertext outside of the enclave, regardless if the column is enclave-enabled or not. 等価比較に関連する次の操作が、決定論的な暗号化でサポートされています。Deterministic encryption supports the following operations involving equality comparisons:

SQL Server 2019 (15.x)SQL Server 2019 (15.x) では、文字列型の列 (charnchar) に対してエンクレーブを使用する機密クエリを実行するには、列でバイナリ 2 並べ替え順序 (BIN2) の照合順序が使用されている必要があります。In SQL Server 2019 (15.x)SQL Server 2019 (15.x), confidential queries using enclaves on a character string column (char, nchar) require the column uses a binary2 sort order (BIN2) collation. Azure SQL データベースAzure SQL Database で文字列に対して機密クエリを実行するには、BIN2 照合順序または UTF-8 照合順序が必要です。In Azure SQL データベースAzure SQL Database, confidential queries on character strings require a BIN2 collation or a UTF-8 collation.

エンクレーブ対応列でのインデックスIndexes on enclave-enabled columns

ランダム化された暗号化を使用してエンクレーブ対応列で非クラスター化インデックスを作成することにより、セキュリティで保護されたエンクレーブを使用する機密 DML クエリの実行を高速化できます。You can create nonclustered indexes on enclave-enabled columns using randomized encryption to make confidential DML queries using the secure enclave run faster.

ランダム化された暗号化を使用して暗号化された列のインデックスで、機密データが漏えいしないようにするため、インデックス データ構造 (B ツリー) 内のキーの値は、プレーンテキストの値に基づいて暗号化され、並べ替えられます。To ensure an index on a column that is encrypted using randomized encryption doesn't leak sensitive data, the key values in the index data structure (B-tree) are encrypted and sorted based on their plaintext values. プレーンテキスト値による並べ替えは、エンクレーブ内でのクエリの処理にも役立ちます。Sorting by the plaintext value is also useful for processing queries inside the enclave. データベース エンジンDatabase Engine内のクエリ Executor により、エンクレーブ内での計算のために暗号化された列のインデックスが使用されるときに、インデックスを検索して列に格納されている特定の値が探索されます。When the query executor in the データベース エンジンDatabase 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.

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

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

詳細については、「セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用する列でインデックスを作成して使用する」を参照してください。For more information, see Create and use indexes on columns using Always Encrypted with secure enclaves. データベース エンジンDatabase Engineでのインデックス作成のしくみに関する一般的な情報については、「クラスター化インデックスと非クラスター化インデックスの概念」の記事を参照してください。For general information on how indexing in データベース エンジンDatabase Engine works, see the article, Clustered and Nonclustered Indexes Described.

データベースの回復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. ADR は、Azure SQL データベースAzure SQL Database では既定で有効になりますが、SQL Server 2019 (15.x)SQL Server 2019 (15.x) ではなりません。ADR is enabled by default in Azure SQL データベースAzure SQL Database, but not in SQL Server 2019 (15.x)SQL Server 2019 (15.x).

従来のデータベース復旧プロセス (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) を使用すると、エンクレーブ内のキャッシュで列暗号化キーを使用できないために遅延する必要がある元に戻す操作の数が、劇的に減少します。Accelerated database recovery (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.

セキュリティに関する考慮事項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.
  • エンクレーブ対応の列暗号化キーでランダム化された暗号化を使用して列を暗号化すると、列による範囲比較のサポートのため、列に格納されたデータの順序がリークする可能性があります。Encrypting a column using randomized encryption with an enclave-enabled column encryption key 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.

事業継続、ディザスター リカバリー、データ移行に関する考慮事項Considerations for business continuity, disaster recovery, and data migration

セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用するデータベース用に高可用性またはディザスター リカバリー ソリューションを構成するときは、すべてのデータベース レプリカでセキュリティで保護されたエンクレーブを使用できることを確認します。When configuring a high availability or disaster recovery solution for a database using Always Encrypted with secure enclaves, make sure that all database replicas can use a secure enclave. プライマリ レプリカにはエンクレーブを使用できても、セカンダリ レプリカには使用できない場合、セキュリティで保護されたエンクレーブが設定された Always Encrypted の機能を使用しようとするすべてのステートメントは、フェールオーバー後に失敗します。If an enclave is available for the primary replica, but not for the secondary replica, any statement that attempts to use the functionality of Always Encrypted with secure enclaves will fail after the failover.

セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用してデータベースをコピーまたは移行するときは、ターゲット環境でエンクレーブが常にサポートされていることを確認します。When you copy or migrate a database using Always Encrypted with secure enclaves, make sure the target environment always supports enclaves. そうでない場合、エンクレーブを使用するステートメントは、コピーまたは移行されたデータベースで機能しません。Otherwise, statements that use enclaves will not work on the copy or the migrated database.

留意する必要のある具体的な考慮事項をいくつか示します。Here are the specific considerations you should keep in mind:

  • SQL ServerSQL Server

    • Always On 可用性グループを構成するときは、可用性グループ内のデータベースがホストされてい各 SQL Server インスタンスで、セキュリティで保護されたエンクレーブが設定された Always Encrypted がサポートされ、エンクレーブと構成証明が構成されていることを確認します。When configuring an Always On availability group, make sure that each SQL Server instance hosting a database in the availability group support Always Encrypted with secure enclaves, and have an enclave and attestation configured.
    • エンクレーブが構成されていない SQL Server インスタンスで、セキュリティで保護されたエンクレーブが設定された Always Encrypted の機能を使用するデータベースのバックアップ ファイルから復元すると、復元操作は成功し、エンクレーブに依存しないすべての機能が使用可能になります。When restoring from 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 statement using the enclave functionality will fail, and indexes on enclave-enabled columns using randomized encryption will become invalid. エンクレーブが構成されていないインスタンスで、セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用するデータベースをアタッチしたときも、同じようになります。The same applies when attaching 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 to 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.
  • Azure SQL DatabaseAzure SQL Database

    • アクティブ geo レプリケーションを構成するとき、セキュリティで保護されたエンクレーブがプライマリ データベースでサポートされている場合は、セカンダリ データベースでもそうであることを確認します。When configuring active geo-replication, make sure a secondary database supports secure enclaves, if the primary database does.

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

既知の制限事項Known limitations

エンクレーブ対応列のための機密コンピューティング機能」で説明したように、セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用すると、インプレース暗号化と、インデックスを使用した豊富な機密クエリがサポートされることで、Always Encrypted のいくつかの制限が対処されます。Always Encrypted with secure enclaves addresses some limitations of Always Encrypted by supporting in-place encryption and richer confidential queries with indexes, as explained in Confidential computing capabilities for enclave-enabled columns.

機能の詳細」に記載されている Always Encrypted での他のすべての制限は、セキュリティで保護されたエンクレーブが設定された Always Encrypted にも適用されます。All other limitations for Always Encrypted listed in 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.
  • SQL Server 2019 (15.x)SQL Server 2019 (15.x) の場合 (この制限は Azure SQL データベースAzure SQL Database には適用されません)、ランダム化された暗号化を使用するエンクレーブ対応列では、入れ子になったループ結合 (可能な場合はインデックスを使用) のみがサポートされます。In SQL Server 2019 (15.x)SQL Server 2019 (15.x) (this limitation does not apply to Azure SQL データベースAzure SQL Database) only nested loop joins (using indexes, if available) are supported on enclave-enabled columns using randomized encryption. 異なる製品間のその他の違いについては、「機密クエリ」を参照してください。For information about other differences among different products, see Confidential queries.
  • 同じコード ページ内の照合順序および 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/ALTER COLUMN Transact-SQL statement. 2 つの異なるステートメントを使用します。Use two separate statements.
  • インメモリ テーブルの列にエンクレーブ対応キーを使用することは、サポートされていません。Using enclave-enabled keys for columns in in-memory tables isn't supported.
  • 計算列を定義する式では、ランダム化された暗号化を使用してエンクレーブが有効な列の計算を実行することはできません (計算が「機密クエリ」に記載されているサポート対象の操作に含まれる場合でも)。Expressions defining computed columns cannot perform any computations on enclave-enabled columns using randomized encryption (even if the computations are among the supported operations listed in Confidential queries).
  • ランダム化された暗号化を使用するエンクレーブ対応の列では、LIKE 演算子のパラメーターでのエスケープ文字はサポートされていません。Escape characters are not supported in parameters of the LIKE operator on enclave-enabled columns using randomized encryption.
  • (暗号化の後でラージ オブジェクトになる) 次のデータ型のいずれかを使用するクエリ パラメーターを持つ 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.
  • ツールの制限事項:Tooling limitations:
    • エンクレーブ対応列マスター キーを格納するためにサポートされるキー ストアは、Windows 証明書ストアと Azure Key Vault のみです。The only supported key stores for storing enclave-enabled column master keys are Windows Certificate Store and Azure Key Vault.
    • エンクレーブ対応のキーが含まれるデータベースのインポート/エクスポートは、サポートされていません。Importing/exporting databases containing enclave-enabled keys is not supported.
    • ALTER TABLE/ALTER COLUMN を使用してインプレース暗号化操作をトリガーするには、SSMS でクエリ ウィンドウを使用してステートメントを発行するか、ステートメントを発行する独自のプログラムを作成する必要があります。To trigger an in-place cryptographic operation via ALTER TABLE/ALTER COLUMN, 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 ウィザードでは、インプレース暗号化はサポートされていません。操作に使用される列暗号化キーがエンクレーブ対応であっても、暗号化操作のためにデータベースからデータが移動されます。Currently, 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 - they move the data out of the database for cryptographic operations, even if the column encryption keys used for the operations are enclave-enabled.

次のステップNext steps

関連項目See also