セキュリティは、データ駆動型システムの最も重要な要件の1つです。暗号化は、データを保護する方法の1つです。ウィキペディアでは、暗号化を次のように定義しています。
“暗号化 は、許可された関係者のみがアクセスでき、許可されていない関係者はアクセスできないようにメッセージまたは情報をエンコードするプロセスです。 」
SQL Server 2016で、Microsoftは常に暗号化と呼ばれる暗号化機能を導入しました 。この記事では、常に暗号化される内容について説明します。 は、簡単な例を使用して、データの暗号化と復号化にどのように使用できるかです。
SQL Serverは常に暗号化されていますか?
常に暗号化 は、クライアントアプリケーションが暗号化キーと復号化キーを管理できるようにするセキュリティ機能であり、クライアントアプリケーションのみが機密データを復号化して使用できるようにします。
いくつかの暗号化技術が存在しますが、それらは常に暗号化ほど安全ではありません。 。たとえば、対称鍵暗号化は、データベース側でデータを暗号化するために使用されます。このアプローチの欠点は、他のデータベース管理者が復号化キーを持っている場合、データにアクセスできることです。
一方、常に暗号化の場合 、データはクライアント側で暗号化され、データベースサーバーは暗号化されたバージョンのデータを受信します。したがって、データベース側でデータを解読することはできません。データを暗号化したクライアントのみがデータを復号化できます。
キータイプ
SQLServerのAlwaysEncrypted機能は、次の2種類のキーを使用します。
-
列暗号化キー(CEK)
-
列マスターキー(CMK)
このキーは、クライアント側またはサードパーティのストレージに配置されます。 CMKはCEKを保護するために使用され、セキュリティの層を追加します。 CMKにアクセスできる人は誰でも、実際にCEKを復号化でき、CEKを使用して実際のデータを復号化できます。
暗号化タイプ
-
決定論的
このタイプの暗号化では、同じタイプのデータに対して常に同様の暗号化テキストが生成されます。テーブル列に検索とグループ化を実装する場合は、その列に確定的暗号化を使用します。
-
ランダム化
ランダム化暗号化は、データを暗号化しようとするたびに、同じタイプのデータに対して異なる暗号化テキストを生成します。列がグループ化と検索に使用されない場合は、ランダム化された暗号化を使用してください。
構成 常に暗号化 SSMSの使用
SSMSを介して常に暗号化されるSQLServerを構成できます。ただし、その前に、データベースを作成し、データベースにテーブルを追加する必要があります。これを行うには、次のスクリプトを実行します。
CREATE DATABASE School Use School CREATE TABLE Student ( StudentId int identity(1,1) primary key, Name varchar(100), Password varchar(100) COLLATE Latin1_General_BIN2 not null, SSN varchar(20) COLLATE Latin1_General_BIN2 not null )>
上記のスクリプトでは、 Schoolという名前の新しいデータベースを作成します。 。データベースには4つの列があります: StudentId 、名前 、パスワード 、および SSN 。 Password列とSSN列にCOLLATEがあることがわかります。 常に暗号化する列のCOLLATEを指定する必要があります 。暗号化のタイプは「Latin1_General_BIN2」として指定されています。
まず、2つのレコードをStudentテーブルに追加してみましょう。
insert into Student ( Name, Password, SSN) VALUES ('John','abc123', '451236521478'), ('Mike','xyz123', '789541239654')
現時点では、常に暗号化は構成されていません。 Studentテーブルのいずれかの列にあるため、Studentテーブルからレコードを選択しようとすると、暗号化された値ではなく実際のデータ値が表示されます。次のクエリを実行して、レコードを選択します。
SELECT * FROM Student
出力は次のようになります:
次に、常に暗号化を有効にするようにSSMSを構成しましょう 。前に述べたように、常に暗号化 列暗号化キーと列マスターキーを作成します。
学校データベースの既存の列暗号化キーと列マスターキーを確認するには、次の図に示すように、[データベース]->[学校]->[セキュリティ]->[常に暗号化されたキー]に移動します。
データセットに暗号化されたレコードがないため、リストにCEKまたはCMKは表示されません。
次に、StudentテーブルのPassword列とSSN列で暗号化を有効にします。これを行うには、[データベース]->[学校]を右クリックします。ドロップダウンメニューから、[列の暗号化]を選択します 次の図に示すオプション:
次へをクリックします はじめにのボタン 窓。 列の選択から ウィンドウで、[パスワード]列と[SSN]列を確認します。 [パスワード]列で、暗号化の種類をランダム化として選択します 。 SSN列には、決定論的を選択します 。これは次のスクリーンショットに示されています:
次へをクリックします マスターキー設定のボタン 窓。デフォルトでは、マスターキーは以下に示すようにクライアントマシンに保存されます:
次へをクリックします 実行設定のボタン および概要 ウィンドウズ。すべてがうまくいけば、次の結果が表示されます。 ウィンドウ。
ここで、もう一度[データベース]->[学校]->[セキュリティ]->[常に暗号化されたキー]に移動すると、次の図に示すように、新しく作成されたCEKとCMKが表示されます。
次に、Studentテーブルからレコードを選択してみます。
SELECT * FROM Student
出力は次のようになります。
出力から、Password列とSSN列が暗号化されていることがわかります。
復号化されたデータの取得
SELECTクエリは暗号化されたデータを返しました。復号化された形式でデータを取得したい場合はどうなりますか?これを行うには、SSMSで新しいクエリウィンドウを作成し、[接続の変更]をクリックします。 次の図に示すように、オブジェクトエクスプローラの上部にあるアイコン:
SQLServer接続ウィンドウが表示されます。 オプションを選択します 以下に示すように、右下からボタン:
表示されたウィンドウで、追加の接続パラメータをクリックします。 次のスクリーンショットに示すように、左上からタブをクリックし、テキストボックスに「列暗号化設定=有効」と入力します。最後に、接続をクリックします ボタン。
ここで、次のSELECTクエリを再度実行します。
SELECT * FROM Student
結果には、以下に示すように、復号化された形式で返されたレコードが表示されます。
結論
常に E 暗号化 SQLServerの最新のセキュリティ機能の1つです。この記事では、常にについて簡単に説明しました。 E 暗号化 SQL ServerManagementStudioを使用して有効にする方法。また、常にを使用してデータを暗号化および復号化する基本的な例も確認しました。 E 暗号化 機能。