Mengonfigurasi Always Encrypted menggunakan Azure Key Vault

BERLAKU UNTUK: Azure SQL Database Azure SQL Managed Instance

Artikel ini menunjukkan kepada Anda cara mengamankan data sensitif dalam database di Azure SQL Database dengan enkripsi data menggunakan wizard Always Encrypted di SQL Server Management Studio (SSMS). Ini juga mencakup instruksi yang akan menunjukkan kepada Anda cara menyimpan setiap kunci enkripsi di Azure Key Vault.

Always Encrypted adalah teknologi enkripsi data yang membantu melindungi data tidak aktif yang sensitif yang ada di server, selama pergerakan antara klien dan server, dan saat data sedang digunakan. Always Encrypted memastikan bahwa data sensitif tidak pernah muncul sebagai teks biasa di dalam sistem database. Setelah mengonfigurasi data enkripsi, hanya aplikasi klien atau server aplikasi yang memiliki akses ke kunci yang dapat mengakses data teks biasa. Untuk informasi mendetail, lihat Always Encrypted (Mesin Database).

Setelah mengonfigurasi database untuk menggunakan Always Encrypted, Anda akan membuat aplikasi klien di C# dengan Visual Studio untuk bekerja dengan data terenkripsi.

Ikuti langkah-langkah dalam artikel ini untuk mempelajari cara menyiapkan Always Encrypted untuk Azure SQL Database atau SQL Managed Instance. Dalam artikel ini, Anda akan mempelajari cara melakukan tugas berikut:

Prasyarat

Mengaktifkan akses aplikasi klien

Anda harus mengaktifkan aplikasi klien Anda untuk mengakses database Anda di SQL Database atau menyiapkan SQL Managed Instance dengan menyiapkan aplikasi Azure Active Directory (AAD) dan menyalin ID Aplikasi dan kunci yang Anda perlukan untuk mengautentikasi aplikasi Anda.

Untuk mendapatkan ID Aplikasi dan kunci, ikuti langkah-langkah berikut dalam membuat aplikasi Azure Active Directory dan perwakilan layanan yang dapat mengakses sumber daya.

Membuat brankas kunci untuk menyimpan kunci Anda

Sekarang setelah aplikasi klien Anda dikonfigurasi dan Anda memiliki ID aplikasi Anda, saatnya untuk membuat brankas kunci dan mengonfigurasi kebijakan aksesnya sehingga Anda dan aplikasi Anda dapat mengakses rahasia brankas (kunci Always Encrypted). Izin buat, dapatkan, daftar, tandai, verifikasi, wrapKey, dan unwrapKey diperlukan untuk membuat kunci master kolom baru dan untuk menyiapkan enkripsi dengan SQL Server Management Studio.

Anda dapat dengan cepat membuat brankas kunci dengan menjalankan skrip berikut. Untuk penjelasan mendetail tentang perintah ini dan informasi selengkapnya tentang membuat dan mengonfigurasi brankas kunci, lihat Apa yang dimaksud dengan Azure Key Vault?.

Penting

Modul PowerShell Azure Resource Manager (RM) masih didukung oleh Azure SQL Database, tetapi semua pengembangan di masa mendatang adalah untuk modul Az.Sql. Modul AzureRM akan terus menerima perbaikan bug hingga setidaknya bulan Desember 2020. Argumen untuk perintah dalam modul Az dan dalam modul AzureRm secara substansial identik. Untuk informasi selengkapnya tentang kompatibilitas keduanya, lihat Memperkenalkan modul Azure PowerShell Az baru.

$subscriptionName = '<subscriptionName>'
$userPrincipalName = '<username@domain.com>'
$applicationId = '<applicationId from AAD application>'
$resourceGroupName = '<resourceGroupName>' # use the same resource group name when creating your SQL Database below
$location = '<datacenterLocation>'
$vaultName = '<vaultName>'

Connect-AzAccount
$subscriptionId = (Get-AzSubscription -SubscriptionName $subscriptionName).Id
Set-AzContext -SubscriptionId $subscriptionId

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzKeyVault -VaultName $vaultName -ResourceGroupName $resourceGroupName -Location $location

Set-AzKeyVaultAccessPolicy -VaultName $vaultName -ResourceGroupName $resourceGroupName -PermissionsToKeys create,get,wrapKey,unwrapKey,sign,verify,list -UserPrincipalName $userPrincipalName
Set-AzKeyVaultAccessPolicy  -VaultName $vaultName  -ResourceGroupName $resourceGroupName -ServicePrincipalName $applicationId -PermissionsToKeys get,wrapKey,unwrapKey,sign,verify,list

Sambungkan dengan SQL Server Management Studio

Buka SQL Server Management Studio (SSMS) dan sambungkan ke server atau dikelola dengan database Anda.

  1. Buka SQL Server Management Studio. (Klik Sambungkan>Mesin Database untuk membuka jendela Sambungkan ke Server jika tidak terbuka.)

  2. Masukkan nama server atau nama instans dan informasi masuk Anda.

    Copy the connection string

Jika jendela Aturan Firewall Baru terbuka, masuk ke Azure dan biarkan SQL Server Management Studio membuat aturan firewall baru untuk Anda.

Membuat tabel

Di bagian ini, Anda akan membuat tabel untuk menahan data pasien. Ini awalnya tidak dienkripsi--Anda akan mengkonfigurasi enkripsi di bagian berikutnya.

  1. Luaskan Database.
  2. Klik kanan database dan klik Kueri Baru.
  3. Tempelkan T-SQL berikut ke jendela kueri baru dan Jalankan.
CREATE TABLE [dbo].[Patients](
         [PatientId] [int] IDENTITY(1,1),
         [SSN] [char](11) NOT NULL,
         [FirstName] [nvarchar](50) NULL,
         [LastName] [nvarchar](50) NULL,
         [MiddleName] [nvarchar](50) NULL,
         [StreetAddress] [nvarchar](50) NULL,
         [City] [nvarchar](50) NULL,
         [ZipCode] [char](5) NULL,
         [State] [char](2) NULL,
         [BirthDate] [date] NOT NULL
         PRIMARY KEY CLUSTERED ([PatientId] ASC) ON [PRIMARY] );
GO

Mengenkripsi kolom (mengonfigurasi Always Encrypted)

SQL Server Management Studio menyediakan wizard yang membantu Anda mengonfigurasi Always Encrypted dengan mudah dengan menyiapkan kunci master kolom, kunci enkripsi kolom, dan kolom terenkripsi untuk Anda.

  1. Luaskan Database>Klinik>Tabel.

  2. Klik kanan tabel Pasien dan pilih Enkripsi Kolom untuk membuka wizard Always Encrypted:

    Screenshot that highlights the Encrypt Columns... menu option.

Wizard Always Encrypted mencakup bagian berikut: Pilihan Kolom, Konfigurasi Kunci Master, Validasi, dan Ringkasan.

Pilihan Kolom

Klik Berikutnya pada halaman Pengenalan untuk membuka halaman Pilihan Kolom. Pada halaman ini, Anda akan memilih kolom mana yang ingin Anda enkripsi, jenis enkripsi, dan kunci enkripsi kolom (CEK) apa yang akan digunakan.

Enkripsi informasi SSN dan BirthDate untuk setiap pasien. Kolom SSN akan menggunakan enkripsi deterministik, yang mendukung kesetaraan pencarian, gabung, dan grup. Kolom BirthDate akan menggunakan enkripsi acak, yang tidak mendukung operasi.

Atur Jenis Enkripsi untuk kolom SSN ke Deterministik dan kolom BirthDate ke Acak. Klik Berikutnya.

Encrypt columns

Konfigurasi Kunci Master

Halaman Konfigurasi Kunci Master adalah tempat Anda menyiapkan CMK Anda dan memilih penyedia penyimpanan kunci tempat CMK akan disimpan. Saat ini, Anda dapat menyimpan CMK di penyimpanan sertifikat Windows, Azure Key Vault, atau modul keamanan perangkat keras (HSM).

Tutorial ini menunjukkan cara menyimpan kunci Anda di Azure Key Vault.

  1. Pilih Azure Key Vault.
  2. Pilih brankas kunci yang diinginkan dari daftar menurun.
  3. Klik Berikutnya.

Master key configuration

Validasi

Anda dapat mengenkripsi kolom sekarang atau menyimpan skrip PowerShell untuk dijalankan nanti. Untuk tutorial ini, pilih Lanjutkan untuk menyelesaikan sekarang dan klik Berikutnya.

Ringkasan

Verifikasi bahwa pengaturan sudah benar dan klik Selesai untuk menyelesaikan penyiapan untuk Always Encrypted.

Screenshot shows the results page with tasks marked as passed.

Verifikasi tindakan wizard

Setelah wizard selesai, database Anda disiapkan untuk Always Encrypted. Wizard melakukan tindakan berikut ini:

  • Membuat kunci master kolom dan menyimpannya di Azure Key Vault.
  • Membuat kunci enkripsi kolom dan menyimpannya di Azure Key Vault.
  • Mengonfigurasi kolom yang dipilih untuk enkripsi. Tabel Pasien saat ini tidak memiliki data, tetapi data apa pun yang ada di kolom yang dipilih sekarang telah terenkripsi.

Anda dapat memverifikasi pembuatan kunci di SQL Server Management Studio dengan meluaskan Klinik>Keamanan>Kunci Always Encrypted.

Membuat aplikasi klien yang berfungsi dengan data terenkripsi

Sekarang setelah Always Encrypted disiapkan, Anda dapat membuat aplikasi yang melakukan penyisipan dan memilih pada kolom terenkripsi.

Penting

Aplikasi Anda harus menggunakan objek SqlParameter saat meneruskan data teks biasa ke server dengan kolom Always Encrypted. Melewati nilai harfiah tanpa menggunakan objek SqlParameter akan menghasilkan pengecualian.

  1. Buka Visual Studio dan buat Aplikasi Konsol C# baru (Visual Studio 2015 dan yang lebih lama) atau Aplikasi Konsol (.NET Framework) (Visual Studio 2017 dan yang lebih baru). Pastikan proyek Anda diatur ke .NET Framework 4.6 atau yang lebih baru.
  2. Beri nama proyek AlwaysEncryptedConsoleAKVApp dan klik OK.
  3. Pasang paket NuGet berikut dengan masuk ke Alat>NuGet Package Manager>Package Manager Console.

Jalankan dua baris kode ini di Package Manager Console:

Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider
Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory

Mengubah string koneksi Anda untuk mengaktifkan Always Encrypted

Bagian ini menjelaskan cara mengaktifkan Always Encrypted dalam string koneksi database Anda.

Untuk mengaktifkan Always Encrypted, Anda perlu menambahkan kata kunci Pengaturan Enkripsi Kolom ke string koneksi Anda dan mengaturnya ke Diaktifkan.

Anda dapat mengaturnya secara langsung dalam string koneksi, atau Anda dapat mengaturnya menggunakan SqlConnectionStringBuilder. Aplikasi sampel di bagian berikutnya menunjukkan cara menggunakan SqlConnectionStringBuilder.

Mengaktifkan Always Encrypted dalam string koneksi

Tambahkan kata kunci berikut ke string koneksi Anda.

Column Encryption Setting=Enabled

Mengaktifkan Always Encrypted dengan SqlConnectionStringBuilder

Kode berikut menunjukkan cara mengaktifkan Always Encrypted dengan mengatur SqlConnectionStringBuilder.ColumnEncryptionSetting ke Diaktifkan.

// Instantiate a SqlConnectionStringBuilder.
SqlConnectionStringBuilder connStringBuilder = new SqlConnectionStringBuilder("replace with your connection string");

// Enable Always Encrypted.
connStringBuilder.ColumnEncryptionSetting = SqlConnectionColumnEncryptionSetting.Enabled;

Mendaftarkan penyedia Azure Key Vault

Kode berikut menunjukkan cara mendaftarkan penyedia Azure Key Vault dengan driver ADO.NET.

private static ClientCredential _clientCredential;

static void InitializeAzureKeyVaultProvider() {
    _clientCredential = new ClientCredential(applicationId, clientKey);

    SqlColumnEncryptionAzureKeyVaultProvider azureKeyVaultProvider = new SqlColumnEncryptionAzureKeyVaultProvider(GetToken);

    Dictionary<string, SqlColumnEncryptionKeyStoreProvider> providers = new Dictionary<string, SqlColumnEncryptionKeyStoreProvider>();

    providers.Add(SqlColumnEncryptionAzureKeyVaultProvider.ProviderName, azureKeyVaultProvider);
    SqlConnection.RegisterColumnEncryptionKeyStoreProviders(providers);
}

Aplikasi konsol sampel Always Encrypted

Sampel ini menunjukkan cara:

  • Mengubah string koneksi Anda untuk mengaktifkan Always Encrypted.
  • Mendaftarkan Azure Key Vault sebagai penyedia penyimpanan kunci aplikasi.
  • Menyisipkan data ke dalam kolom terenkripsi.
  • Memilih baris dengan memfilter nilai tertentu dalam kolom terenkripsi.

Ganti konten Program.cs dengan kode berikut. Ganti string koneksi untuk variabel connectionString global di baris yang secara langsung mendahului metode Utama dengan string koneksi Anda yang valid dari portal Microsoft Azure. Ini adalah satu-satunya perubahan yang perlu Anda lakukan pada kode ini.

Jalankan aplikasi untuk melihat Always Encrypted dalam tindakan.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider;

namespace AlwaysEncryptedConsoleAKVApp {
    class Program {
        // Update this line with your Clinic database connection string from the Azure portal.
        static string connectionString = @"<connection string from the portal>";
        static string applicationId = @"<application ID from your AAD application>";
        static string clientKey = "<key from your AAD application>";

        static void Main(string[] args) {
            InitializeAzureKeyVaultProvider();

            Console.WriteLine("Signed in as: " + _clientCredential.ClientId);

            Console.WriteLine("Original connection string copied from the Azure portal:");
            Console.WriteLine(connectionString);

            // Create a SqlConnectionStringBuilder.
            SqlConnectionStringBuilder connStringBuilder =
                new SqlConnectionStringBuilder(connectionString);

            // Enable Always Encrypted for the connection.
            // This is the only change specific to Always Encrypted
            connStringBuilder.ColumnEncryptionSetting =
                SqlConnectionColumnEncryptionSetting.Enabled;

            Console.WriteLine(Environment.NewLine + "Updated connection string with Always Encrypted enabled:");
            Console.WriteLine(connStringBuilder.ConnectionString);

            // Update the connection string with a password supplied at runtime.
            Console.WriteLine(Environment.NewLine + "Enter server password:");
            connStringBuilder.Password = Console.ReadLine();

            // Assign the updated connection string to our global variable.
            connectionString = connStringBuilder.ConnectionString;

            // Delete all records to restart this demo app.
            ResetPatientsTable();

            // Add sample data to the Patients table.
            Console.Write(Environment.NewLine + "Adding sample patient data to the database...");

            InsertPatient(new Patient() {
                SSN = "999-99-0001",
                FirstName = "Orlando",
                LastName = "Gee",
                BirthDate = DateTime.Parse("01/04/1964")
            });
            InsertPatient(new Patient() {
                SSN = "999-99-0002",
                FirstName = "Keith",
                LastName = "Harris",
                BirthDate = DateTime.Parse("06/20/1977")
            });
            InsertPatient(new Patient() {
                SSN = "999-99-0003",
                FirstName = "Donna",
                LastName = "Carreras",
                BirthDate = DateTime.Parse("02/09/1973")
            });
            InsertPatient(new Patient() {
                SSN = "999-99-0004",
                FirstName = "Janet",
                LastName = "Gates",
                BirthDate = DateTime.Parse("08/31/1985")
            });
            InsertPatient(new Patient() {
                SSN = "999-99-0005",
                FirstName = "Lucy",
                LastName = "Harrington",
                BirthDate = DateTime.Parse("05/06/1993")
            });

            // Fetch and display all patients.
            Console.WriteLine(Environment.NewLine + "All the records currently in the Patients table:");

            foreach (Patient patient in SelectAllPatients()) {
                Console.WriteLine(patient.FirstName + " " + patient.LastName + "\tSSN: " + patient.SSN + "\tBirthdate: " + patient.BirthDate);
            }

            // Get patients by SSN.
            Console.WriteLine(Environment.NewLine + "Now lets locate records by searching the encrypted SSN column.");

            string ssn;

            // This very simple validation only checks that the user entered 11 characters.
            // In production be sure to check all user input and use the best validation for your specific application.
            do {
                Console.WriteLine("Please enter a valid SSN (ex. 999-99-0003):");
                ssn = Console.ReadLine();
            } while (ssn.Length != 11);

            // The example allows duplicate SSN entries so we will return all records
            // that match the provided value and store the results in selectedPatients.
            Patient selectedPatient = SelectPatientBySSN(ssn);

            // Check if any records were returned and display our query results.
            if (selectedPatient != null) {
                Console.WriteLine("Patient found with SSN = " + ssn);
                Console.WriteLine(selectedPatient.FirstName + " " + selectedPatient.LastName + "\tSSN: "
                    + selectedPatient.SSN + "\tBirthdate: " + selectedPatient.BirthDate);
            }
            else {
                Console.WriteLine("No patients found with SSN = " + ssn);
            }

            Console.WriteLine("Press Enter to exit...");
            Console.ReadLine();
        }

        private static ClientCredential _clientCredential;

        static void InitializeAzureKeyVaultProvider() {
            _clientCredential = new ClientCredential(applicationId, clientKey);

            SqlColumnEncryptionAzureKeyVaultProvider azureKeyVaultProvider =
              new SqlColumnEncryptionAzureKeyVaultProvider(GetToken);

            Dictionary<string, SqlColumnEncryptionKeyStoreProvider> providers =
              new Dictionary<string, SqlColumnEncryptionKeyStoreProvider>();

            providers.Add(SqlColumnEncryptionAzureKeyVaultProvider.ProviderName, azureKeyVaultProvider);
            SqlConnection.RegisterColumnEncryptionKeyStoreProviders(providers);
        }

        public async static Task<string> GetToken(string authority, string resource, string scope) {
            var authContext = new AuthenticationContext(authority);
            AuthenticationResult result = await authContext.AcquireTokenAsync(resource, _clientCredential);

            if (result == null)
                throw new InvalidOperationException("Failed to obtain the access token");
            return result.AccessToken;
        }

        static int InsertPatient(Patient newPatient) {
            int returnValue = 0;

            string sqlCmdText = @"INSERT INTO [dbo].[Patients] ([SSN], [FirstName], [LastName], [BirthDate])
     VALUES (@SSN, @FirstName, @LastName, @BirthDate);";

            SqlCommand sqlCmd = new SqlCommand(sqlCmdText);

            SqlParameter paramSSN = new SqlParameter(@"@SSN", newPatient.SSN);
            paramSSN.DbType = DbType.AnsiStringFixedLength;
            paramSSN.Direction = ParameterDirection.Input;
            paramSSN.Size = 11;

            SqlParameter paramFirstName = new SqlParameter(@"@FirstName", newPatient.FirstName);
            paramFirstName.DbType = DbType.String;
            paramFirstName.Direction = ParameterDirection.Input;

            SqlParameter paramLastName = new SqlParameter(@"@LastName", newPatient.LastName);
            paramLastName.DbType = DbType.String;
            paramLastName.Direction = ParameterDirection.Input;

            SqlParameter paramBirthDate = new SqlParameter(@"@BirthDate", newPatient.BirthDate);
            paramBirthDate.SqlDbType = SqlDbType.Date;
            paramBirthDate.Direction = ParameterDirection.Input;

            sqlCmd.Parameters.Add(paramSSN);
            sqlCmd.Parameters.Add(paramFirstName);
            sqlCmd.Parameters.Add(paramLastName);
            sqlCmd.Parameters.Add(paramBirthDate);

            using (sqlCmd.Connection = new SqlConnection(connectionString)) {
                try {
                    sqlCmd.Connection.Open();
                    sqlCmd.ExecuteNonQuery();
                }
                catch (Exception ex) {
                    returnValue = 1;
                    Console.WriteLine("The following error was encountered: ");
                    Console.WriteLine(ex.Message);
                    Console.WriteLine(Environment.NewLine + "Press Enter key to exit");
                    Console.ReadLine();
                    Environment.Exit(0);
                }
            }
            return returnValue;
        }


        static List<Patient> SelectAllPatients() {
            List<Patient> patients = new List<Patient>();

            SqlCommand sqlCmd = new SqlCommand(
              "SELECT [SSN], [FirstName], [LastName], [BirthDate] FROM [dbo].[Patients]",
                new SqlConnection(connectionString));

            using (sqlCmd.Connection = new SqlConnection(connectionString))

            using (sqlCmd.Connection = new SqlConnection(connectionString)) {
                try {
                    sqlCmd.Connection.Open();
                    SqlDataReader reader = sqlCmd.ExecuteReader();

                    if (reader.HasRows) {
                        while (reader.Read()) {
                            patients.Add(new Patient() {
                                SSN = reader[0].ToString(),
                                FirstName = reader[1].ToString(),
                                LastName = reader["LastName"].ToString(),
                                BirthDate = (DateTime)reader["BirthDate"]
                            });
                        }
                    }
                }
                catch (Exception ex) {
                    throw;
                }
            }

            return patients;
        }

        static Patient SelectPatientBySSN(string ssn) {
            Patient patient = new Patient();

            SqlCommand sqlCmd = new SqlCommand(
                "SELECT [SSN], [FirstName], [LastName], [BirthDate] FROM [dbo].[Patients] WHERE [SSN]=@SSN",
                new SqlConnection(connectionString));

            SqlParameter paramSSN = new SqlParameter(@"@SSN", ssn);
            paramSSN.DbType = DbType.AnsiStringFixedLength;
            paramSSN.Direction = ParameterDirection.Input;
            paramSSN.Size = 11;

            sqlCmd.Parameters.Add(paramSSN);

            using (sqlCmd.Connection = new SqlConnection(connectionString)) {
                try {
                    sqlCmd.Connection.Open();
                    SqlDataReader reader = sqlCmd.ExecuteReader();

                    if (reader.HasRows) {
                        while (reader.Read()) {
                            patient = new Patient() {
                                SSN = reader[0].ToString(),
                                FirstName = reader[1].ToString(),
                                LastName = reader["LastName"].ToString(),
                                BirthDate = (DateTime)reader["BirthDate"]
                            };
                        }
                    }
                    else {
                        patient = null;
                    }
                }
                catch (Exception ex) {
                    throw;
                }
            }
            return patient;
        }

        // This method simply deletes all records in the Patients table to reset our demo.
        static int ResetPatientsTable() {
            int returnValue = 0;

            SqlCommand sqlCmd = new SqlCommand("DELETE FROM Patients");
            using (sqlCmd.Connection = new SqlConnection(connectionString)) {
                try {
                    sqlCmd.Connection.Open();
                    sqlCmd.ExecuteNonQuery();

                }
                catch (Exception ex) {
                    returnValue = 1;
                }
            }
            return returnValue;
        }
    }

    class Patient {
        public string SSN { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime BirthDate { get; set; }
    }
}

Memverifikasi bahwa data terenkripsi

Anda dapat dengan cepat memeriksa bahwa data aktual di server dienkripsi dengan mengkueri data Pasien dengan SQL Server Management Studio (menggunakan koneksi Anda saat ini di mana Pengaturan Enkripsi Kolom belum diaktifkan).

Jalankan kueri berikut pada database Klinik.

SELECT FirstName, LastName, SSN, BirthDate FROM Patients;

Anda dapat melihat bahwa kolom terenkripsi tidak berisi data teks biasa apa pun.

Screenshot that shows that the encrypted columns do not contain any plaintext data.

Untuk menggunakan SQL Server Management Studio untuk mengakses data teks biasa, Pertama-tama Anda perlu memastikan bahwa pengguna memiliki izin yang tepat ke Azure Key Vault: dapatkan, unwrapKey, dan verifikasi. Untuk informasi mendetail, lihat Membuat dan Menyimpan Kunci Master Kolom (Always Encrypted).

Kemudian tambahkan parameter Column Encryption Setting=enabled selama koneksi Anda.

  1. Di SQL Server Management Studio, klik kanan server Anda di Object Explorer, lalu klik Putuskan sambungan.

  2. Klik Sambungkan>Mesin Database untuk membuka jendela Sambungkan ke Server, lalu klik Opsi.

  3. Klik Parameter Koneksi Tambahan dan ketik Column Encryption Setting=enabled.

    Screenshot that shows the Additional Correction Parameters tab.

  4. Jalankan kueri berikut pada database Klinik.

    SELECT FirstName, LastName, SSN, BirthDate FROM Patients;
    

    Sekarang Anda dapat melihat data teks biasa di kolom terenkripsi.

    New console application

Langkah berikutnya

Setelah database Anda dikonfigurasi untuk menggunakan Always Encrypted, Anda mungkin ingin melakukan hal berikut: