次の方法で共有


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

適用対象: SQL Server Azure SQL Database Azure 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 ウィザードが起動します。

    Always Encrypted ウィザードを開く様子を示すスクリーンショット。

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

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

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

    Always Encrypted ウィザードの列選択画面。

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

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

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

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

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

      Azure Key Vault を使用した Always Encrypted ウィザードのマスター キーの選択を示すスクリーンショット。

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

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

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

        証明書ストアを使用した Always Encrypted ウィザードのマスター キーの選択を示すスクリーンショット。

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

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

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

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

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

    Always Encrypted ウィザードの概要のスクリーンショット。

  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. [接続] を選択します。

    Always Encrypted が無効になっている SSMS 接続オプションのスクリーンショット。

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

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

    暗号化された列から取得した暗号テキストの結果のスクリーンショット。

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

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

    Always Encrypted が有効になっている SSMS 接続オプションのスクリーンショット。

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

    暗号化された列から取得したプレーンテキストの結果のスクリーンショット。

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

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

    既存のクエリ ウィンドウでのパラメーター化の有効化を示すスクリーンショット。

  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]
    

次のステップ

関連項目