Always Encrypted (Database Engine) (Always Encrypted (データベース エンジン))Always Encrypted (Database Engine)

適用対象: ○SQL Server (2016 以降)○Azure SQL DatabaseXAzure SQL Data Warehouse XParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Always EncryptedAlways Encrypted

Always Encrypted は、 Azure SQL データベースAzure SQL Database または SQL ServerSQL Server のデータベースに格納されたクレジット カード番号や身分登録番号 (アメリカの社会保障番号など) などの機微なデータを保護するために設計された機能です。Always Encrypted is a feature designed to protect sensitive data, such as credit card numbers or national identification numbers (e.g. U.S. social security numbers), stored in Azure SQL データベースAzure SQL Database or SQL ServerSQL Server databases. Always Encrypted を使用すると、クライアントは データベース エンジンDatabase Engine ( SQL データベースSQL Database または SQL ServerSQL Server) に暗号化キーを開示することなく、クライアント アプリケーション内の機微なデータを暗号化することができます。Always Encrypted allows clients to encrypt sensitive data inside client applications and never reveal the encryption keys to the データベース エンジンDatabase Engine ( SQL データベースSQL Database or SQL ServerSQL Server). 結果として、Always Encrypted は、データを所有 (および表示できる) 人とデータを管理する (ただし、アクセス権を与えない) 人を分離します。As a result, Always Encrypted provides a separation between those who own the data (and can view it) and those who manage the data (but should have no access). Always Encrypted は、オンプレミスのデータベース管理者やクラウド データベース オペレーターなどを含む、高い特権を持つものの無許可のユーザーによる暗号化データへのアクセスを無効にすることで、顧客が機微なデータを直接管理することなく安心して格納できます。By ensuring on-premises database administrators, cloud database operators, or other high-privileged, but unauthorized users, cannot access the encrypted data, Always Encrypted enables customers to confidently store sensitive data outside of their direct control. これにより、組織は保存データと実行データを暗号化して Azure に格納し、オンプレミスのデータベースの管理をサード パーティに委任するか、自社の DBA スタッフによる取り扱い許可の要件を緩和できます。This allows organizations to encrypt data at rest and in use for storage in Azure, to enable delegation of on-premises database administration to third parties, or to reduce security clearance requirements for their own DBA staff.

Always Encrypted は、アプリケーションに対して暗号化を透過的に実行します。Always Encrypted makes encryption transparent to applications. クライアント コンピューターにインストールされている、Always Encrypted が有効のドライバーは、クライアント アプリケーション内の機微なデータを自動的に暗号化および暗号化解除することで、この処理を実行します。An Always Encrypted-enabled driver installed on the client computer achieves this by automatically encrypting and decrypting sensitive data in the client application. ドライバーは、 データベース エンジンDatabase Engineにデータを渡す前に機微な列のデータを暗号化し、アプリケーションに対するセマンティクスが維持されるように自動的にクエリを書き換えます。The driver encrypts the data in sensitive columns before passing the data to the データベース エンジンDatabase Engine, and automatically rewrites queries so that the semantics to the application are preserved. 同様に、ドライバーはクエリ結果に含まれている暗号化されたデータベース列に格納されているデータを透過的に暗号化解除します。Similarly, the driver transparently decrypts data, stored in encrypted database columns, contained in query results.

Always Encrypted は、 SQL Server 2016SQL Server 2016SQL データベースSQL Database で使用できます。Always Encrypted is available in SQL Server 2016SQL Server 2016 and SQL データベースSQL Database. ( SQL Server 2016SQL Server 2016 SP1 より前は、Always Encrypted は Enterprise Edition 限定でした。)Always Encrypted が含まれている Channel 9 のプレゼンテーションについては、「 Keeping Sensitive Data Secure with Always Encrypted」 (Always Encrypted を使用して機微なデータの安全を確保する) を参照してください。(Prior to SQL Server 2016SQL Server 2016 SP1, Always Encrypted was limited to the Enterprise Edition.) For a Channel 9 presentation that includes Always Encrypted, see Keeping Sensitive Data Secure with Always Encrypted.

標準のシナリオTypical Scenarios

クライアントとデータの両方がオンプレミスにあるClient and Data On-Premises

顧客はオンプレミスのクライアント アプリケーションと SQL ServerSQL Server の両方を社内で運用しています。A customer has a client application and SQL ServerSQL Server both running on-premises, at their business location. 外部ベンダーを雇用して SQL ServerSQL Serverの管理を委任することを考えています。The customer wants to hire an external vendor to administer SQL ServerSQL Server. SQL ServerSQL Serverに格納された機微なデータを保護するために、顧客は Always Encrypted を使用してデータベース管理者とアプリケーション管理者の役割分担を明確にしています。In order to protect sensitive data stored in SQL ServerSQL Server, the customer uses Always Encrypted to ensure the separation of duties between database administrators and application administrators. 顧客は Always Encrypted のキーのプレーンテキスト値を、クライアント アプリケーションがアクセスできる信頼できるキー ストアに格納しています。The customer stores plaintext values of Always Encrypted keys in a trusted key store which the client application can access. SQL ServerSQL Server の管理者はキーにアクセスできないため、 SQL ServerSQL Serverに格納された機微なデータを暗号化解除できません。.

クライアントがオンプレミス、データが Azure 内にあるClient On-Premises with Data in Azure

顧客はオンプレミスのクライアント アプリケーションを社内で運用しています。A customer has an on-premises client application at their business location. アプリケーションは、Azure にホストされたデータベース (Microsoft Azure の仮想マシンで実行されている SQL データベースSQL Database または SQL ServerSQL Server ) に格納された機微なデータを元に運用しています。The application operates on sensitive data stored in a database hosted in Azure ( SQL データベースSQL Database or SQL ServerSQL Server running in a virtual machine on Microsoft Azure). 顧客は Always Encrypted を使用して、Always Encrypted のキーをオンプレミスにホストされた信頼できるキー ストアに格納することで、 MicrosoftMicrosoft クラウドの管理者が機微なデータにアクセスできないようにします。The customer uses Always Encrypted and stores Always Encrypted keys in a trusted key store hosted on-premises, to ensure MicrosoftMicrosoft cloud administrators have no access to sensitive data.

クライアントとデータの両方が Azure 内にあるClient and Data in Azure

顧客には、(ワーカー ロールや Web ロールなどで) Microsoft Azure でホストされているクライアント アプリケーションがあります。このアプリケーションは、Azure でホストされているデータベースに格納されている機密データに影響があります。A customer has a client application, hosted in Microsoft Azure (e.g. in a worker role or a web role), which operates on sensitive data stored in a database hosted in Azure (SQL Database or SQL Server running in a virtual machine on Microsoft Azure). Always Encrypted には、クラウド管理者からのデータの完全な分離機能がありませんが、データとキーの両方がクライアント層をホストするプラットフォームのクラウド管理者に公開されているので、セキュリティ攻撃の対象となる領域を減らすという利点が顧客にあります (データベース内のデータは常に暗号化されています)。Although Always Encrypted does not provide complete isolation of data from cloud administrators, as both the data and keys are exposed to cloud administrators of the platform hosting the client tier, the customer still benefits from reducing the security attack surface area (the data is always encrypted in the database).

機能How it Works

機密データを含む各データベース列に Always Encrypted を構成できます。You can configure Always Encrypted for individual database columns containing your sensitive data. 列の暗号化を設定するときに、列のデータを保護するために使用する暗号化アルゴリズムと暗号化キーに関する情報を指定します。When setting up encryption for a column, you specify the information about the encryption algorithm and cryptographic keys used to protect the data in the column. Always Encrypted では、列暗号化キーと列マスター キーという 2 種類のキーを使用します。Always Encrypted uses two types of keys: column encryption keys and column master keys. 列暗号化キーは、暗号化された列のデータを暗号化するために使用されます。A column encryption key is used to encrypt data in an encrypted column. 列マスター キーは、1 つ以上の列暗号化キーを暗号化するキー保護キーです。A column master key is a key-protecting key that encrypts one or more column encryption keys.

データベース エンジンは、データベース メタデータの各列の暗号化構成を格納します。The Database Engine stores encryption configuration for each column in database metadata. ただし、データベース エンジンは、いずれの種類も、プレーンテキストで格納または使用しません。Note, however, the Database Engine never stores or uses the keys of either type in plaintext. 列暗号化キーの暗号化値と、列マスター キーの場所に関する情報のみが格納されます。列マスター キーは、Azure Key Vault、クライアント コンピューターの Windows 証明書ストア、ハードウェア セキュリティ モジュールなどの外部の信頼できるキー ストアに格納されます。It only stores encrypted values of column encryption keys and the information about the location of column master keys, which are stored in external trusted key stores, such as Azure Key Vault, Windows Certificate Store on a client machine, or a hardware security module.

プレーンテキストで暗号化された列に格納されているデータにアクセスするには、アプリケーションで、Always Encrypted が有効なクライアント ドライバーを使用する必要があります。To access data stored in an encrypted column in plaintext, an application must use an Always Encrypted enabled client driver. アプリケーションがパラメーター化クエリを発行すると、ドライバーはデータベース エンジンと透過的に連携し、暗号化されている列 (つまり暗号化する必要がある列) を対象にするパラメーターを決定します。When an application issues a parameterized query, the driver transparently collaborates with the Database Engine to determine which parameters target encrypted columns and, thus, should be encrypted. 暗号化する必要がある各パラメーターについて、ドライバーは、暗号化アルゴリズムと列の列暗号化キーの暗号化値、パラメーターの対象、対応する列暗号化キーに関する情報を取得します。For each parameter that needs to be encrypted, the driver obtains the information about the encryption algorithm and the encrypted value of the column encryption key for the column, the parameter targets, as well as the location of its corresponding column master key.

次に、ドライバーは、暗号化された列暗号化キー値を復号化するために、列マスター キーを含むキー ストアに接続し、プレーンテキスト列の暗号化キーを使用してパラメーターを暗号化します。Next, the driver contacts the key store, containing the column master key, in order to decrypt the encrypted column encryption key value and then, it uses the plaintext column encryption key to encrypt the parameter. 以降、同じ列の暗号化キーを使用する際に、キー ストアに対するラウンド トリップ数を軽減するために、結果のプレーンテキスト列暗号化キーはキャッシュされます。The resultant plaintext column encryption key is cached to reduce the number of round trips to the key store on subsequent uses of the same column encryption key. ドライバーは、暗号化された列を対象とするパラメーターのプレーンテキスト値を、暗号化値と置き換え、処理を実行するサーバーにクエリを送信します。The driver substitutes the plaintext values of the parameters targeting encrypted columns with their encrypted values, and it sends the query to the server for processing.

サーバーは結果セットを計算し、結果セットに暗号化が含まれている場合、ドライバーは列の暗号化メタデータ (暗号化アルゴリズムや対応するキーに関する情報など) をアタッチします。The server computes the result set, and for any encrypted includes in the result set, the driver attaches the encryption metadata for the column, including the information about the encryption algorithm and the corresponding keys. ドライバーは、まずローカル キャッシュ内でプレーンテキスト列の暗号化キーを検索しようと試み、キャッシュ内にキーが見つからなかった場合にのみ、列マスター キーを検索します。The driver first tries to find the plaintext column encryption key in the local cache, and only makes a round to the column master key, if it cannot find the key in the cache. 次に、ドライバーは結果を復号化し、プレーンテキスト値をアプリケーションに返します。Next, the driver decrypts the results and returns plaintext values to the application.

クライアント ドライバーは、列マスター キー ストア プロバイダーを使用して、列マスター キーを含むキー ストアに接続します。このプロバイダーは、列マスター キーを含むキー ストアをカプセル化するクライアント側ソフトウェア コンポーネントです。A client driver interacts with a key store, containing a column master key, using a column master key store provider, which is a client-side software component that encapsulates a key store containing the column master key. キー ストアの一般的な種類のプロバイダーは、Microsoft からのクライアント側ドライバーのライブラリで、またはスタンドアロンのダウンロードとして入手できます。Providers for common types of key stores are available in client side driver libraries from Microsoft or as standalone downloads. 独自のプロバイダーを実装することもできます。You can also implement your own provider. 組み込みの列マスター キー ストア プロバイダーを含む Always Encrypted の機能は、ドライバー ライブラリとそのバージョンによって異なります。Always Encrypted capabilities, including built-in column master key store providers, vary by a driver library and its version.

特定のクライアント ドライバーで Always Encrypted を使用してアプリケーションを開発する方法の詳細については、「 Always Encrypted (client development)」(Always Encrypted (クライアント開発)) を参照してください。For details of how to develop applications using Always Encrypted with particular client drivers, see Always Encrypted (client development).

明確な暗号化またはランダム化された暗号化の選択Selecting Deterministic or Randomized Encryption

データベース エンジンは、暗号化された列に格納されているプレーンテキスト データに対して動作しませんが、列の暗号化の種類によっては、暗号化されたデータでも一部のクエリをサポートしています。The Database Engine never operates on plaintext data stored in encrypted columns, but it still supports some queries on encrypted data, depending on the encryption type for the column. Always Encrypted は、ランダム化された暗号化と明確な暗号化の 2 種類の暗号化をサポートします。Always Encrypted supports two types of encryption: randomized encryption and deterministic encryption.

  • 明確な暗号化は、任意のプレーン テキストを指定した値の場合、常に同じ暗号化された値を生成します。Deterministic encryption always generates the same encrypted value for any given plain text value. 明確な暗号化を使用すると、暗号化された列で、ポイント参照、等価結合、グループ化、インデックス作成を行うことができます。Using deterministic encryption allows point lookups, equality joins, grouping and indexing on encrypted columns. ただし、権限のないユーザーが、暗号化された列のパターンを調べることで、暗号化された値に関する情報を推測できる可能性もあります。特に、True/False や、North/South/East/West 地域など、暗号化される可能性のある少数のグループがある場合は注意が必要です。However, but may also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column, especially if there is a small set of possible encrypted values, such as True/False, or North/South/East/West region. 明確な暗号化では、バイナリ 2 文字型の列の並べ替え順序を持つ列の照合順序を使用する必要があります。Deterministic encryption must use a column collation with a binary2 sort order for character columns.

  • ランダム化された暗号化は低い予測可能な方法でデータを暗号化するためのメソッドを使用します。Randomized encryption uses a method that encrypts data in a less predictable manner. ランダム化された暗号化は安全性が上がりますが、暗号化された列に対して検索、グループ化、インデックス作成、結合ができなくなります。Randomized encryption is more secure, but prevents searching, grouping, indexing, and joining on encrypted columns.

パラメーター (身分登録番号など) の検索またはグループ化に使用される列については、明確な暗号化を使用します。Use deterministic encryption for columns that will be used as search or grouping parameters, for example a government ID number. 他のレコードとグループ化されておらず、テーブルの結合に使用されていない信用調査情報などのデータについては、ランダム化された暗号化を使用します。Use randomized encryption, for data such as confidential investigation comments, which are not grouped with other records and are not used to join tables. Always Encrypted による暗号化アルゴリズムの詳細については、「 Always Encrypted による暗号化」を参照してください。For details on Always Encrypted cryptographic algorithms, see Always Encrypted Cryptography.

Always Encrypted の構成Configuring Always Encrypted

データベースで Always Encrypted を初めてセットアップする場合、Always Encrypted キーの生成、キー メタデータの作成、選択したデータベース列の暗号化プロパティの構成、暗号化する必要がある列に既に存在する可能性があるデータの暗号化の一部またはすべてを行います。The initial setup of Always Encrypted in a database involves generating Always Encrypted keys, creating key metadata, configuring encryption properties of selected database columns, and/or encrypting data that may already exist in columns that need to be encrypted. これらのタスクの一部は Transact-SQL でサポートされていないので、クライアント側ツールを使用する必要があります。Please note that some of these tasks are not supported in Transact-SQL and require the use of client-side tools. Always Encrypted キーと保護対象の機密データは、サーバーに対してプレーンテキストで暴露されることはないので、データベース エンジンがキー プロビジョニングに関与し、データ暗号化または復号化操作を実行することはできません。As Always Encrypted keys and protected sensitive data are never revealed in plaintext to the server, the Database Engine cannot be involved in key provisioning and perform data encryption or decryption operations. このようなタスクには、SQL Server Management Studio または PowerShell を使用できます。You can use SQL Server Management Studio or PowerShell to accomplish such tasks.

タスクTask SSMSSSMS PowerShellPowerShell T-SQLT-SQL
対応する列マスター キーを使用した列マスター キー、列暗号化キー、暗号化された列の暗号化キーをプロビジョニングする。Provisioning column master keys, column encryption keys and encrypted column encryption keys with their corresponding column master keys. はいYes Yes いいえNo
データベース内にキー メタデータを作成する。Creating key metadata in the database. はいYes はいYes はいYes
暗号化された列がある新しいテーブルを作成するCreating new tables with encrypted columns はいYes はいYes はいYes
選択されたデータベース列内にあるデータを暗号化するEncrypting existing data in selected database columns はいYes Yes いいえNo
注意

必ず、データベースをホストするコンピューターと異なるコンピューターで、キー プロビジョニングまたはデータ暗号化ツールを実行してください。Make sure you run key provisioning or data encryption tools in a secure environment, on a computer that is different from the computer hosting your database. そうしないと、機密データやキーがサーバー環境に漏れ、Always Encrypted を使用する利点が少なくなる可能性があります。Otherwise, sensitive data or the keys could leak to the server environment, which would reduce the benefits of the using Always Encrypted.

Always Encrypted の構成の詳細については、以下を参照してください。For details on configuring Always Encrypted see:

Always Encrypted の作業の開始Getting Started with Always Encrypted

Always Encrypted Wizard を使用すると、Always Encrypted ですぐに作業を開始できます。Use the Always Encrypted Wizard to quickly start using Always Encrypted. このウィザードで必要なキーがプロビジョニングされ、選択した列の暗号化が構成されます。The wizard will provision the required keys and configure encryption for selected columns. 暗号化を設定している列に、既に何らかのデータが含まれている場合、そのデータは暗号化されます。If the columns, you are setting encryption for, already contain some data, the wizard will encrypt the data. 次の例は、列を暗号化するプロセスを示します。The following example demonstrates the process for encrypting a column.

注意

ウィザードの利用方法については、「 Getting Started with Always Encrypted with SSMS」(SSMS での Always Encrypted の作業の開始) の動画をご覧ください。For a video that includes using the wizard, see Getting Started with Always Encrypted with SSMS.

  1. Management Studio の オブジェクト エクスプローラー を使用して暗号化する列があるテーブルを含む既存のデータベースに接続するか、新しいデータベースを作成し、暗号化する列がある 1 つ以上のテーブルを作成し、接続します。Connect to an existing database that contains tables with columns you wish to encrypt using the Object Explorer of Management Studio, or create a new database, create one or more tables with columns to encrypt, and connect to it.
  2. データベースを右クリックして [タスク] をポイントし、[列の暗号化] をクリックして Always Encrypted ウィザードを開きます。Right-click your database, point to Tasks, and then click** Encrypt Columns** to open the Always Encrypted Wizard.
  3. [概要] ページの内容を確認し、 [次へ]をクリックします。Review the Introduction page, and then click Next.
  4. [列の選択] ページで、テーブルを展開して暗号化する列を選択します。On the Column Selection page, expand the tables, and select the columns that you want to encrypt.
  5. 暗号化する選択した各列で、 [暗号化の種類][明確] または [ランダム化]のいずれかに設定します。For each column selected for encryption, set the Encryption Type to either Deterministic or Randomized.
  6. 暗号化する選択した各列で、 [暗号化キー]を選択します。For each column selected for encryption, select an Encryption Key. 以前にこのデータベースに対して暗号化キーを作成していない場合は、新しく自動作成されたキーの既定の選択肢を選び、 [次へ]をクリックします。If you have not previously created any encryption keys for this database, select the default choice of a new auto-generated key, and then click Next.
  7. [マスター キーの構成] ページで、新しいキーを格納する場所を選択し、マスター キー ソースを選択し、 [次へ]をクリックします。On the Master Key Configuration page, select a location to store the new key, and select a master key source, and then click Next.
  8. [検証] ページで、スクリプトをすぐに実行するか PowerShell スクリプトを作成するかを選択し、 [次へ]をクリックします。On the Validation page, choose whether to run the script immediately or create a PowerShell script, and then click Next.
  9. [概要] ページで、選択したオプションを確認し、 [完了]をクリックします。On the Summary page, review the options you have selected, and then click Finish. 完了したらウィザードを閉じます。Close the wizard when completed.

機能の詳細Feature Details

  • クエリでは、明確な暗号化を使用して暗号化された列の等値比較を実行できますが、その他の演算 (より大きい/より小さい、LIKE 演算子を使用したパターン一致、算術演算など) は実行できません。Queries can perform equality comparison on columns encrypted using deterministic encryption, but no other operations (e.g. greater/less than, pattern matching using the LIKE operator, or arithmetical operations).

  • ランダム化された暗号化を使用して暗号化された列に対するクエリでは、これらの列に対していずれの操作も実行できません。Queries on columns encrypted by using randomized encryption cannot perform operations on any of those columns. ランダム化された暗号化を使用して暗号化された列のインデックス作成はサポートされていません。Indexing columns encrypted using randomized encryption is not supported.

  • 列の暗号化キーには、それぞれ異なる列のマスター キーで暗号化された値を最大で 2 つ設定できます。A column encryption key can have up to two different encrypted values, each encrypted with a different column master key. 2 つ設定すると、列マスター キーの交換が容易になります。This facilitates column master key rotation.

  • 明確な暗号化には、列に バイナリ 2 照合順序の 1 つが必要です。Deterministic encryption requires a column to have one of the binary2 collations.

  • 暗号化されたオブジェクトの定義を変更した後、sp_refresh_parameter_encryption を実行して、オブジェクトに対する Always Encrypted のメタデータを更新します。After changing the definition of an encrypted object, execute sp_refresh_parameter_encryption to update the Always Encrypted metadata for the object.

Always Encrypted は、以下の特性を持つ列に対してはサポートされません (例: 次の条件のいずれかが列に適用される場合、列の CREATE TABLE/ALTER TABLEEncrypted WITH 句は使用できません)。Always Encrypted is not supported for the columns with the below characteristics (e.g. the Encrypted WITH clause cannot be used in CREATE TABLE/ALTER TABLE for a column, if any of the following conditions apply to the column):

  • 次のデータ型のいずれかを使用する列: xmltimestamp/rowversionimagentexttextsql_varianthierarchyidgeographygeometry、alias、ユーザー定義型。Columns using one of the following datatypes: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, user defined-types.
  • FILESTREAM 列FILESTREAM columns
  • IDENTITY プロパティを持つ列Columns with the IDENTITY property
  • ROWGUIDCOL プロパティを持つ列Columns with ROWGUIDCOL property
  • 非 BIN2 照合順序を持つ文字列 (varchar、char など)String (varchar, char, etc.) columns with non-bin2 collations
  • ランダム化された暗号化によって暗号化された列をキー列として使用する、非クラスター化インデックスのキーとなる列 (明確な暗号化によって暗号化された列は問題ありません)Columns that are keys for nonclustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine)
  • ランダム化された暗号化によって暗号化された列をキー列として使用する、クラスター化インデックスのキーとなる列 (明確な暗号化によって暗号化された列は問題ありません)Columns that are keys for clustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine)
  • ランダム化および明確な暗号化により暗号化された列の両方を含む、フルテキスト インデックスのキーとなる列Columns that are keys for fulltext indices containing encrypted columns both randomized and deterministic
  • 計算列によって参照される列 (式が Always Encrypted でサポート外の演算を実行するとき)Columns referenced by computed columns (when the expression does unsupported operations for Always Encrypted)
  • スパース列セットSparse column set
  • 統計情報によって参照される列Columns that are referenced by statistics
  • 別名型を使用する列Columns using alias type
  • パーティション分割列Partitioning columns
  • 既定の制約を含む列Columns with default constraints
  • ランダムな暗号化を使用するときに UNIQUE 制約によって参照される列 (明確な暗号化はサポートされます)Columns referenced by unique constraints when using randomized encryption (deterministic encryption is supported)
  • ランダムな暗号化を使用するときの主キー列 (明確な暗号化はサポートされます)Primary key columns when using randomized encryption (deterministic encryption is supported)
  • ランダム化された暗号化または明確な暗号化を使用する際の、外部キー制約での列の参照 (参照元および参照先の列が異なるキーまたはアルゴリズムを使用する場合)Referencing columns in foreign key constraints when using randomized encryption or when using deterministic encryption, if the referenced and referencing columns use different keys or algorithms
  • CHECK 制約によって参照される列Columns referenced by check constraints
  • 変更データ キャプチャを使用するテーブル内の列Columns in tables that use change data capture
  • 変更の追跡を持つテーブル上の主キー列Primary key columns on tables that have change tracking
  • マスキングされている列 (動的なデータ マスキングを使用)Columns that are masked (using Dynamic Data Masking)
  • Stretch Database テーブル内の列。Columns in Stretch Database tables. (Always Encrypted で暗号化された列を持つテーブルは Stretch で有効にできます)。(Tables with columns encrypted with Always Encrypted can be enabled for Stretch.)
  • 外部 (PolyBase) テーブルの列 (注: 外部テーブルと暗号化された列を持つテーブルを同じクエリで使用することはサポートされています)Columns in external (PolyBase) tables (note: using external tables and tables with encrypted columns in the same query is supported)
  • 暗号化された列を対象にしたテーブル値パラメーターはサポートされていません。Table-valued parameters targeting encrypted columns are not supported.

次の句は、暗号化された列では使用できません。The following clauses cannot be used for encrypted columns:

  • FOR XMLFOR XML
  • FOR JSON PATHFOR JSON PATH

次の機能は、暗号化された列では機能しません。The following features do not work on encrypted columns:

  • トランザクション レプリケーションまたはマージ レプリケーションTransactional or merge replication
  • 分散クエリ (リンク サーバー)Distributed queries (linked servers)

ツールの要件Tool Requirements

  • SQL Server Management Studio は、 [サーバーへの接続] ダイアログの [追加のプロパティ] タブで column encryption setting=enabled に接続している場合、暗号化された列から取得した結果を復号化できます。SQL Server Management Studio can decrypt the results retrieved from encrypted columns if you connect with the column encryption setting=enabled in the Additional Properties tab of the Connect to Server dialog. 暗号化された列の挿入、更新、フィルター処理には、SQL Server Management Studio バージョン 17 以降が必要です。Requires at least SQL Server Management Studio version 17 to insert, update, or filter encrypted columns.

  • sqlcmd からの暗号化された接続には、バージョン 13.1 以上が必要です。これは ダウンロード センターから入手できます。Encrypted connections from sqlcmd require at least version 13.1, which is available from the Download Center.

データベース権限Database Permissions

Always Encrypted には 4 つのアクセス許可があります。There are four permissions for Always Encrypted:

  • ALTER ANY COLUMN MASTER KEY (列マスター キーの作成と削除に必要です。)ALTER ANY COLUMN MASTER KEY (Required to create and delete a column master key.)

  • ALTER ANY COLUMN ENCRYPTION KEY (列暗号化キーの作成と削除に必要です。)ALTER ANY COLUMN ENCRYPTION KEY (Required to create and delete a column encryption key.)

  • VIEW ANY COLUMN MASTER KEY DEFINITION (キーの管理または暗号化列のクエリに使用する列マスター キーのメタデータのアクセスと読み取りに必要です。)VIEW ANY COLUMN MASTER KEY DEFINITION (Required to access and read the metadata of the column master keys to manage keys or query encrypted columns.)

  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (キーの管理または暗号化列のクエリに使用する列暗号化キーのメタデータのアクセスと読み取りに必要です。)VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (Required to access and read the metadata of the column encryption key to manage keys or query encrypted columns.)

    次の表は、一般的な操作に必要なアクセス許可をまとめたものです。The following table summarizes the permissions required for common actions.

ScenarioScenario ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
キー管理 (データベース内のキーの作成/変更/確認)Key management (creating/changing/reviewing key metadata in the database) ×X ×X ×X ×X
暗号化された列のクエリQuerying encrypted columns ×X ×X

重要な注意点:Important notes:

  • アクセス許可は、 Transact-SQLTransact-SQL Management StudioManagement Studio (ダイアログ ボックスとウィザード)、または PowerShell を使用するアクションに適用されます。The permissions apply to actions using Transact-SQLTransact-SQL, Management StudioManagement Studio (dialog boxes and wizard), or PowerShell.

  • 2 つの VIEW アクセス許可は、ユーザーが列を復号化するアクセス許可を持っていない場合でも、暗号化された列を選択する場合に必要です。The two VIEW permissions are required when selecting encrypted columns, even if the user does not have permission to decrypt the columns.

  • SQL ServerSQL Serverでは、 固定データベース ロールに対して、両方の VIEW public アクセス許可が既定で付与されます。In SQL ServerSQL Server, both VIEW permissions are granted by default to the public fixed database role. データベース管理者は、 ロールに対する VIEW public アクセス許可を失効 (または拒否) し、特定のロールまたはユーザーに付与して、より制限が大きい制御を実装することができます。A database administrator may choose to revoke (or deny) the VIEW permissions to the public role and grant them to specific roles or users to implement more restricted control.

  • SQL データベースSQL Databaseでは、 固定データベース ロールに対して、 VIEW public アクセス許可が既定で付与されません。In SQL データベースSQL Database, the VIEW permissions are not granted by default to the public fixed database role. これによって、(旧バージョンの DacFx を使用する) 一部の既存のレガシ ツールが正常に動作するようになります。This enables certain existing, legacy tools (using older versions of DacFx) to work properly. 最終的に、暗号化された列を操作する場合 (復号化しない場合でも)、データベース管理者は 2 つの VIEW アクセス許可を明示的に付与する必要があります。Consequently, to work with encrypted columns (even if not decrypting them) a database administrator must explicitly grant the two VIEW permissions.

Example

次の Transact-SQLTransact-SQL は、列のマスター キー メタデータ、列の暗号化キー メタデータ、暗号化された列を持つテーブルを作成します。The following Transact-SQLTransact-SQL creates column master key metadata, column encryption key metadata, and a table with encrypted columns. メタデータで参照されるキーの作成方法の詳細については、以下を参照してください。For information how to create the keys, referenced in the metadata, see:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
   );  
---------------------------------------------  
CREATE COLUMN ENCRYPTION KEY MyCEK   
WITH VALUES  
(  
    COLUMN_MASTER_KEY = MyCMK,   
    ALGORITHM = 'RSA_OAEP',   
    ENCRYPTED_VALUE = 0x01700000016C006F00630061006C006D0061006300680069006E0065002F006D0079002F003200660061006600640038003100320031003400340034006500620031006100320065003000360039003300340038006100350064003400300032003300380065006600620063006300610031006300284FC4316518CF3328A6D9304F65DD2CE387B79D95D077B4156E9ED8683FC0E09FA848275C685373228762B02DF2522AFF6D661782607B4A2275F2F922A5324B392C9D498E4ECFC61B79F0553EE8FB2E5A8635C4DBC0224D5A7F1B136C182DCDE32A00451F1A7AC6B4492067FD0FAC7D3D6F4AB7FC0E86614455DBB2AB37013E0A5B8B5089B180CA36D8B06CDB15E95A7D06E25AACB645D42C85B0B7EA2962BD3080B9A7CDB805C6279FE7DD6941E7EA4C2139E0D4101D8D7891076E70D433A214E82D9030CF1F40C503103075DEEB3D64537D15D244F503C2750CF940B71967F51095BFA51A85D2F764C78704CAB6F015EA87753355367C5C9F66E465C0C66BADEDFDF76FB7E5C21A0D89A2FCCA8595471F8918B1387E055FA0B816E74201CD5C50129D29C015895CD073925B6EA87CAF4A4FAF018C06A3856F5DFB724F42807543F777D82B809232B465D983E6F19DFB572BEA7B61C50154605452A891190FB5A0C4E464862CF5EFAD5E7D91F7D65AA1A78F688E69A1EB098AB42E95C674E234173CD7E0925541AD5AE7CED9A3D12FDFE6EB8EA4F8AAD2629D4F5A18BA3DDCC9CF7F352A892D4BEBDC4A1303F9C683DACD51A237E34B045EBE579A381E26B40DCFBF49EFFA6F65D17F37C6DBA54AA99A65D5573D4EB5BA038E024910A4D36B79A1D4E3C70349DADFF08FD8B4DEE77FDB57F01CB276ED5E676F1EC973154F86  
);  
---------------------------------------------  
CREATE TABLE Customers (  
    CustName nvarchar(60)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = RANDOMIZED,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    SSN varchar(11)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = DETERMINISTIC ,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    Age int NULL  
);  
GO  

参照See Also

CREATE COLUMN MASTER KEY (Transact-SQL) CREATE COLUMN MASTER KEY (Transact-SQL)
CREATE COLUMN ENCRYPTION KEY (Transact-SQL) CREATE COLUMN ENCRYPTION KEY (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
column_definition (Transact-SQL) column_definition (Transact-SQL)
sys.column_encryption_keys (Transact-SQL) sys.column_encryption_keys (Transact-SQL)
sys.column_encryption_key_values (Transact-SQL) sys.column_encryption_key_values (Transact-SQL)
sys.column_master_keys (Transact-SQL) sys.column_master_keys (Transact-SQL)
sys.columns (Transact-SQL) sys.columns (Transact-SQL)
Always Encrypted ウィザード Always Encrypted Wizard
Always Encrypted で保護された機微なデータの移行 Migrate Sensitive Data Protected by Always Encrypted
Always Encrypted (クライアント開発) Always Encrypted (client development)
Always Encrypted による暗号化 Always Encrypted Cryptography
SSMS を使用した Always Encrypted の構成 PowerShell を使用した Always Encrypted の構成 Configure Always Encrypted using SSMS Configure Always Encrypted using PowerShell
sp_refresh_parameter_encryption (Transact-SQL)sp_refresh_parameter_encryption (Transact-SQL)