チュートリアル: Always Encrypted の作業の開始

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Always Encrypted の開始方法について説明します。 次のことを示します。

  • データベース内の選択した列を暗号化する方法。
  • 暗号化された列のクエリを実行する方法。

前提条件

このチュートリアルには、次のものが必要です。

手順 1: データベース スキーマを作成して設定する

この手順では、HR スキーマと Employees テーブルを作成します。 次に、テーブルにデータを入力します。

  1. データベースに接続します。 SSMS からデータベースに接続する方法については、「クイックスタート: SQL Server Management Studio (SSMS) を使用して Azure SQL Database または Azure Managed Instance に接続してクエリを実行する」または「クイックスタート: SQL Server Management Studio (SSMS) を使用して SQL Server インスタンスに接続し、クエリを行う」を参照してください。

  2. ContosoHR データベースの新しいクエリ ウィンドウを開きます。

  3. 以下のステートメントを貼り付けて実行し、Employees という名前の新しいテーブルを作成します。

    CREATE SCHEMA [HR];
    GO
    
    CREATE TABLE [HR].[Employees]
    (
        [EmployeeID] [int] IDENTITY(1,1) NOT NULL
        , [SSN] [char](11) NOT NULL
        , [FirstName] [nvarchar](50) NOT NULL
        , [LastName] [nvarchar](50) NOT NULL
        , [Salary] [money] NOT NULL
    ) ON [PRIMARY];
    
  4. 次のステートメントを貼り付けて実行し、Employees テーブルにいくつかの従業員レコードを追加します。

    INSERT INTO [HR].[Employees]
    (
        [SSN]
        , [FirstName]
        , [LastName]
        , [Salary]
    )
    VALUES
    (
        '795-73-9838'
        , N'Catherine'
        , N'Abel'
        , $31692
    );
    
    INSERT INTO [HR].[Employees]
    (
        [SSN]
        , [FirstName]
        , [LastName]
        , [Salary]
    )
    VALUES
    (
        '990-00-6818'
        , N'Kim'
        , N'Abercrombie'
        , $55415
    );
    

手順 2: 列を暗号化する

この手順では、Always Encrypted の列マスター キーと列暗号化キーをプロビジョニングします。 次に、Employees テーブルの SSN 列と Salary 列を暗号化します。

SSMS に用意されているウィザードを使用すると、列マスター キー、列暗号化キーを設定し、選択した列を暗号化することにより、簡単に Always Encrypted を構成できます。

  1. オブジェクト エクスプローラーで、 [データベース]>[ContosoHRTables]> テーブルを展開します。

  2. [Employees] テーブルを右クリックして [列の暗号化] を選択すると、Always Encrypted ウィザードが起動します。

    Screenshot of opening the Always Encrypted Wizard.

  3. ウィザードの [概要] ページで [次へ] を選択します。

  4. [列の選択] ページで

    1. SSN給与の列を選択します。 SSN 列の決定論的暗号化と、Salary 列のランダム化された暗号化を選択します。 決定論的暗号化では、暗号化された列の等価比較を伴うポイント ルックアップ検索などのクエリがサポートされます。 ランダム化された暗号化では、暗号化された列の計算はサポートされません。
    2. 両方の列の列暗号化キーとして CEK-Auto1 (新規) のままにします。 このキーはまだ存在せず、ウィザードによって生成されます。
    3. [次へ] を選択します。

    Screenshot of the Always Encrypted Wizard column selection.

  5. [マスター キーの構成] ページで、ウィザードによって生成される新しい列マスター キーを構成します。 まず、列マスター キーを格納する場所を選択する必要があります。 ウィザードでは、次の 2 種類のキー ストアがサポートされています。

    • Azure Key Vault - データベースが Azure にある場合にお勧めします
    • Windows 証明書ストア

    一般に、特にデータベースが Azure にある場合は、Azure Key Vault が推奨されるオプションです。

    • Azure Key Vault を使用するには:

      1. [Azure Key Vault]を選択します。
      2. [サインイン] を選択し、Azure へのサインインを完了します。
      3. サインインすると、アクセスできるサブスクリプションとキー コンテナーの一覧がページに表示されます。 使用するキー コンテナーを含む Azure サブスクリプションを選択します。
      4. キー コンテナーを選択します。
      5. [次へ] を選択します。

      Screenshot of the Always Encrypted Wizard master key selection using Azure Key Vault.

    • Windows 証明書ストアを使用するには:

      1. [Windows 証明書ストア] を選択します。

      2. [現在のユーザー] の既定の選択のままにします。これにより、現在のユーザー ストアに証明書 (新しい列マスター キー) を生成するようにウィザードに指示されます。

        Screenshot of the Always Encrypted Wizard master key selection using the certificate store.

      3. [次へ] を選択します。

  6. [インプレース暗号化の設定] ページでは、データベースでエンクレーブが有効になっていないため、追加の構成は必要ありません。 [次へ] を選択します。

  7. [実行設定] ページで、暗号化を続行するか、後で実行する PowerShell スクリプトを生成するかを確認するメッセージが表示されます。 既定の設定のままにして、[ 次へ] を選択します。

  8. [概要] ページで、ウィザードによって実行されるアクションが通知されます。 すべての情報が正しいことを確認し、[完了] を選択します。

  9. [結果]ページでは、ウィザードの操作の進行状況を監視できます。 すべての操作が正常に完了するまで待ち、[閉じる] を選択します。

    Screenshot of the Always Encrypted Wizard summary.

  10. (省略可能)ウィザードによってデータベースに加えられた変更を確認します。

    1. [ContosoHR]>[Security]>[Always Encrypted Keys]を展開して、列マスター キーのメタデータ オブジェクトと、ウィザードによって作成された列暗号化を調べることができます。

    2. キー メタデータを含むシステム カタログ ビューに対して、以下のクエリを実行することもできます。

      SELECT * FROM sys.column_master_keys;
      SELECT * FROM sys.column_encryption_keys
      SELECT * FROM sys.column_encryption_key_values
      
    3. オブジェクト エクスプローラーで、[社員] テーブルを右クリックし、[スクリプト テーブル]>[Create To]>[New クエリ エディター Window]を選択します。 これにより、Employees テーブルの CREATE TABLE ステートメントを含む新しいクエリ ウィンドウが開きます。 SSN 列と Salary 列の定義に表示される ENCRYPTED WITH 句に注意してください。

    4. sys.columns に対して次のクエリを実行して、2 つの暗号化された列の列レベルの暗号化メタデータを取得することもできます。

      SELECT
      [name]
      , [encryption_type]
      , [encryption_type_desc]
      , [encryption_algorithm_name]
      , [column_encryption_key_id]
      FROM sys.columns
      WHERE [encryption_type] IS NOT NULL;
      

手順 3: 暗号化された列のクエリを実行する

  1. 接続に対して Always Encrypted が無効になっている状態でデータベースに接続します。

    1. 新しいクエリ ウィンドウを開きます。
    2. クエリ ウィンドウ内の任意の場所を右クリックし、[接続]>[接続の変更] の順に選択します。 [データベース エンジンへの接続] ダイアログが開きます。
    3. [オプション]<< を選択します。 [データベース エンジンへの接続] ダイアログに追加のタブが表示されます。
    4. [Always Encrypted] タブを選択します。
    5. [Always Encrypted を有効にする (列の暗号化)] が選択されていないことを確認します。
    6. [接続] を選択します。

    Screenshot of the SSMS connection option for Always Encrypted disabled.

  2. 次のクエリを貼り付け、実行します。 クエリは、バイナリ暗号化データを返す必要があります。

    SELECT [SSN], [Salary] FROM [HR].[Employees]
    

    Screenshot of cipher text results from encrypted columns.

  3. 接続に対して Always Encrypted を有効にして、データベースに接続する必要があります。

    1. クエリ ウィンドウ内の任意の場所を右クリックし、[接続]>[接続の変更] の順に選択します。 [データベース エンジンへの接続] ダイアログが開きます。
    2. [オプション]<< を選択します。 [データベース エンジンへの接続] ダイアログに追加のタブが表示されます。
    3. [Always Encrypted] タブを選択します。
    4. [Always Encrypted を有効にする]を選択します。
    5. [接続] を選択します。

    Screenshot of the SSMS connection option for Always Encrypted enabled.

  4. 同じクエリを再実行してください。 データベース接続に対して Always Encrypted が有効になっているため、SSMS のクライアント ドライバーは、両方の暗号化された列に格納されているデータの暗号化解除を試みます。 Azure Key Vault を使用する場合は、Azure へのサインインを求められる場合があります。

    Screenshot of plaintext results from encrypted columns.

  5. [Always Encrypted のパラメーター化]を有効にします。 この機能を使用すると、暗号化された列でデータをフィルター処理 (または暗号化された列にデータを挿入) するクエリを実行できます。

    1. SSMS のメイン メニューから [クエリ] を選択します。
    2. [クエリ オプション...] を選択します。
    3. [実行]>[詳細]の順に移動します。
    4. [Always Encryptedのパラメーター化を有効にする] が有効になっていることを確認します。
    5. [OK] を選択します。

    Screenshot enabling parameterization in an existing query window.

  6. 次のクエリを貼り付けて実行します。このクエリでは、暗号化された SSN 列でデータがフィルター処理されます。 クエリは、プレーンテキスト値を含む 1 つの行を返す必要があります。

    DECLARE @SSN [char](11) = '795-73-9838'
    SELECT [SSN], [Salary] FROM [HR].[Employees]
    WHERE [SSN] = @SSN
    
  7. 必要に応じて、アクセス ポリシーアクセス許可モデルで構成された Azure Key Vault を使用している場合は、次の手順に従って、ユーザーがデータを保護する列マスター キーにアクセスせずに、暗号化された列からプレーンテキスト データを取得しようとしたときの動作を確認します。

    1. キー unwrap コンテナーのアクセス ポリシーで、自分のキーアクセス許可を削除します。 詳細については、キー コンテナーへのアクセス ポリシーの割り当てに関するページを参照してください。
    2. SSMS のクライアント ドライバーは、キー コンテナーから取得した列暗号化キーを 2 時間キャッシュするため、SSMS を閉じてもう一度開きます。 これにより、キー キャッシュが空になります。
    3. 接続に対して Always Encrypted を有効にして、データベースに接続する必要があります。
    4. 次のクエリを貼り付け、実行します。 必要な unwrap アクセス許可がないことを示すエラー メッセージが表示され、クエリが失敗します。
    SELECT [SSN], [Salary] FROM [HR].[Employees]
    

次のステップ

関連項目