SQL Server Management Studio를 사용하여 상시 암호화 구성Configure Always Encrypted using SQL Server Management Studio

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터)예Azure SQL Database아니요Azure SQL Data Warehouse아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

이 문서에서는 SSMS(SQL Server Management Studio)를 사용하여 상시 암호화를 구성하고 상시 암호화를 사용하는 데이터베이스를 관리하는 작업에 대해 설명합니다.This article describes tasks for configuring Always Encrypted and managing databases that use Always Encrypted with SQL Server Management Studio (SSMS).

SSMS를 사용하여 상시 암호화를 구성하는 경우 SSMS에서 상시 암호화 키와 중요한 데이터를 둘 다 처리하므로 키와 데이터가 SSMS 프로세스 내에서 일반 텍스트로 모두 표시됩니다.When you use SSMS to configure Always Encrypted, SSMS handles both Always Encrypted keys and sensitive data, so both the keys and the data appear in plaintext inside the SSMS process. 따라서 보안 컴퓨터에서 SSMS를 실행하는 것이 중요합니다.Therefore, it is important you run SSMS on a secure computer. 데이터베이스가 SQL Server에서 호스트된 경우 SQL Server 인스턴스를 호스트하는 컴퓨터 이외의 다른 컴퓨터에서 SSMS를 실행합니다.If your database is hosted in SQL Server, make sure SSMS runs on a different computer than the computer hosting your SQL Server instance. 상시 암호화의 주요 목표는 데이터베이스 시스템이 손상된 경우에도 암호화된 중요한 데이터를 안전하게 보호하는 것이므로 SQL Server 컴퓨터에서 키 또는 중요한 데이터를 처리하는 PowerShell 스크립트를 실행하면 기능의 이점이 감소하거나 무효화될 수 있습니다.As the primary goal of Always Encrypted is to ensure encrypted sensitive data is safe even if the database system gets compromised, executing a PowerShell script that processes keys or sensitive data on the SQL Server computer can reduce or defeat the benefits of the feature. 추가 권장 사항을 보려면 키 관리에 대한 보안 고려 사항을 참조하세요.For additional recommendations, see Security Considerations for Key Management.

SSMS는 데이터베이스를 관리하는 사용자(DBA)와 암호화 암호를 관리하고 일반 텍스트 데이터에 액세스할 수 있는 사용자(보안 관리자 및/또는 응용 프로그램 관리자) 간의 역할 구분을 지원하지 않습니다.SSMS does not support role separation between those who manage the database (DBAs) and those who manage cryptographic secrets and have access to plaintext data (Security Administrators and/or Application Administrators). 조직에서 역할 구분을 적용하는 경우 PowerShell을 사용하여 상시 암호화를 구성해야 합니다.If your organization enforces role separation, you should use PowerShell to configure Always Encrypted. 자세한 내용은 상시 암호화를 위한 키 관리 개요PowerShell을 사용하여 상시 암호화 구성을 참조하세요.For additional information, see Overview of Key Management for Always Encrypted and Configure Always Encrypted using PowerShell.

상시 암호화 마법사를 사용하여 상시 암호화 구성Configuring Always Encrypted using the Always Encrypted Wizard

상시 암호화 마법사 는 선택한 데이터베이스 열에 대해 원하는 암호화 구성을 설정할 수 있는 강력한 도구입니다.The Always Encrypted Wizard is a powerful tool that allows you to set the desired encryption configuration for selected database columns. 현재 상시 암호화 구성 및 원하는 대상 구성에 따라 마법사에서 열을 암호화하거나, 암호를 해독(암호화 제거)하거나, 다시 암호화(예: 열에 대해 구성된 현재 형식과 다른 암호화 형식 또는 새 열 암호화 키 사용)할 수 있습니다.Depending on the current Always Encrypted configuration and the desired target configuration, the wizard can encrypt a column, decrypt it (remove encryption), or re-encrypt it (for example, using a new column encryption key or an encryption type that is different from the current type, configured for the column). 마법사를 한 번 실행하여 여러 열을 구성할 수 있습니다.Multiple columns can be configured in a single run of the wizard.

상시 암호화에 대해 키를 프로비전하지 않은 경우 마법사에서 자동 생성합니다.If you have not provisioned any keys for Always Encrypted, the wizard will auto-generate them for you. 열 마스터 키의 키 저장소를 Windows 인증서 저장소 또는 Azure 주요 자격 증명 모음 중에서 선택하기만 하면 됩니다.You just need to pick a key store for your column master key: Windows Certificate Store or Azure Key Vault. 마법사가 데이터베이스에 키 이름과 키 메타데이터 개체를 자동 생성합니다.The wizard will auto-generate names for keys and their metadata objects in the database. 키 프로비전 방법에 대한 추가 제어 및 열 마스터 키를 포함하는 키 저장소에 대한 추가 선택 항목이 필요한 경우 마법사를 시작하기 전에 새 열 마스터 키새 열 암호화 키 대화 상자(아래 설명 참조)를 사용하여 키를 프로비전할 수 있습니다.If you need more control for how your keys are provisioned (and more choices for a key store containing a column master key), you can use the New Column Master Key and New Column Encryption Key dialogs (described below) to provision keys before you start the wizard. 그런 다음 상시 암호화 마법사에서 기존 열 암호화 키를 선택할 수 있습니다.In the Always Encrypted Wizard, you can then pick the existing column encryption key.

마법사를 사용하는 방법에 대한 자세한 내용은 상시 암호화 마법사를 참조하세요.For details of how to use the wizard, see Always Encrypted Wizard.

암호화된 열 쿼리Querying Encrypted Columns

이 섹션에서는 다음 작업 수행 방법에 대해 설명합니다.This section describes how to:

  • 암호화된 열에 저장된 암호 텍스트 값을 검색합니다.Retrieve ciphertext values stored in encrypted columns.
  • 암호화된 열에 저장된 일반 텍스트 값을 검색합니다.Retrieve plaintext values stored in encrypted columns.
  • 암호화된 열을 대상으로 하는 일반 텍스트 값을 보냅니다(예: INSERT 또는 UPDATE 문에 포함하거나 WHERE 문에서 SELECT 절의 조회 매개 변수로).Send plaintext values targeting encrypted columns (e.g. in INSERT or UPDATE statements and as a lookup parameters of WHERE clauses in SELECT statements).

암호화된 열에 저장된 암호 텍스트 값 검색Retrieving ciphertext values stored in encrypted columns

암호화된 열에서 값의 암호를 해독하지 않고 암호 텍스트 값을 검색하려면To retrieve values from an encrypted column as ciphertext (without decrypting the values):

  1. SELECT 쿼리를 실행 중인 쿼리 편집기 창에 대한 데이터베이스 연결에 Always Encrypted가 사용하지 않도록 설정되어 있는지 확인합니다.Make sure Always Encrypted is disabled for the database connection for the Query Editor window, from which you are running your SELECT query. 아래의 데이터베이스 연결에 Always Encrypted 사용 및 사용 안 함 을 참조하세요.See Enabling and disabling Always Encrypted for a database connection below.
  2. SELECT 쿼리를 실행합니다.Run a SELECT query. 암호화된 열에서 검색된 모든 데이터는 이진(암호화) 값으로 반환됩니다.Any data retrieved from encrypted columns will be returned as binary (encrypted) values.

예제 Example
SSNPatients 테이블의 암호화된 열이라고 가정할 경우, 아래 표시된 쿼리는 데이터베이스 연결에 Always Encrypted가 사용되지 않는 경우 이진 암호 텍스트 값을 검색합니다.Assuming SSN is an encrypted column in the Patients table, the query shown below will retrieve binary ciphertext values, if Always Encrypted is disabled for the database connection.

always-encrypted-ciphertext

암호화된 열에 저장된 일반 텍스트 값 검색Retrieving plaintext values stored in encrypted columns

암호화된 열에서 일반 텍스트 값을 검색하여 값의 암호를 해독하려면To retrieve values from an encrypted column as plaintext (to decrypt the values):

  1. SELECT 쿼리를 실행 중인 쿼리 편집기 창에 대한 데이터베이스 연결에 Always Encrypted가 사용하도록 설정되어 있는지 확인합니다.Make sure Always Encrypted is enabled for the database connection for the Query Editor window, from which you are running your SELECT query. 이는 SSMS에서 사용하는 .NET Framework Data Provider for SQL Server에 암호화된 열에서 검색된 데이터의 암호를 해독하도록 지시합니다.This will instruct the .NET Framework Data Provider for SQL Server (used by SSMS) to decrypt data retrieved from encrypted columns. 아래의 데이터베이스 연결에 Always Encrypted 사용 및 사용 안 함 을 참조하세요.See Enabling and disabling Always Encrypted for a database below.
  2. 암호화된 열에 대해 구성된 모든 열 마스터 키에 액세스할 수 있는지 확인합니다.Make sure you can access all column master keys configured for encrypted columns. 예를 들어 열 마스터 키가 인증서인 경우 SSMS가 실행되는 컴퓨터에 인증서를 배포해야 합니다.For example, if your column master key is a certificate, you need to make sure the certificate is deployed on the machine, SSMS is running on. 또는 열 마스터 키가 Azure Key Vault에 저장된 키인 경우 해당 키에 대한 액세스 권한이 있는지 확인해야 합니다(Azure에 로그인하라는 메시지가 표시될 수도 있음).Or, if your column master key is a key stored in Azure Key Vault, you need to make sure you have permissions to access the key (Also, you might be prompted to sign in to Azure.)
  3. SELECT 쿼리를 실행합니다.Run a SELECT query. 암호화된 열에서 검색된 모든 데이터는 원래 데이터 형식의 값으로 일반 텍스트 형식으로 반환됩니다.Any data retrieved from encrypted columns will be returned as plaintext as values of the original data types.

예제 Example
SSN이 char(11) 테이블의 암호화된 Patients 열이라고 가정할 경우, 아래 표시된 쿼리는 Always Encrypted가 데이터베이스 연결에 사용되고 SSN 열에 대해 구성된 열 마스터 키에 대한 액세스 권한이 있는 경우 일반 텍스트 값을 반환합니다.Assuming SSN is an encrypted char(11) column in the Patients table, the query, shown below, will return plaintext values, if Always Encrypted is enabled for the database connection and if you have access to the column master key configured for the SSN column.

always-encrypted-plaintext

암호화된 열을 대상으로 하는 일반 텍스트 값 보내기Sending plaintext values targeting encrypted columns

암호화된 열을 대상으로 하는 값을 보내는 쿼리(예: 암호화된 열에 저장된 값을 삽입, 업데이트 또는 필터링하는 쿼리)를 실행하려면 다음을 수행합니다.To execute a query that sends a value that targets an encrypted column, for example a query that inserts, updates or filters by a value stored in an encrypted column:

  1. SELECT 쿼리를 실행 중인 쿼리 편집기 창에 대한 데이터베이스 연결에 Always Encrypted가 사용하도록 설정되어 있는지 확인합니다.Make sure Always Encrypted is enabled for the database connection for the Query Editor window, from which you are running your SELECT query. 이는 SSMS에서 사용하는 .NET Framework Data Provider for SQL Server에 암호화된 열을 대상으로 하는 매개 변수화된 Transact-SQL(아래 참조)을 암호화하도록 지시합니다.This will instruct the .NET Framework Data Provider for SQL Server (used by SSMS) to encrypt parameterized Transact-SQL variables (see below) targeting encrypted columns. 아래의 데이터베이스 연결에 Always Encrypted 사용 및 사용 안 함 을 참조하세요.See Enabling and disabling Always Encrypted for a database below.
  2. 암호화된 열에 대해 구성된 모든 열 마스터 키에 액세스할 수 있는지 확인합니다.Make sure you can access all column master keys configured for encrypted columns. 예를 들어 열 마스터 키가 인증서인 경우 SSMS가 실행되는 컴퓨터에 인증서를 배포해야 합니다.For example, if your column master key is a certificate, you need to make sure the certificate is deployed on the machine, SSMS is running on. 또는 열 마스터 키가 Azure Key Vault에 저장된 키인 경우 해당 키에 대한 액세스 권한이 있는지 확인해야 합니다(Azure에 로그인하라는 메시지가 표시될 수도 있음).Or, if your column master key is a key stored in Azure Key Vault, you need to make sure you have permissions to access the key (Also, you might be prompted to sign in to Azure.)
  3. 쿼리 편집기 창에 Always Encrypted에 대한 매개 변수화가 사용하도록 설정되어 있는지 확인합니다.Ensure Parameterization for Always Encrypted is enabled for the Query Editor window. SSMS 버전 17.0 이상이 필요합니다. Transact-SQL 변수를 선언하고 데이터베이스로 전송(삽입, 업데이트 또는 필터링)할 값으로 초기화합니다.(Requires at least SSMS version 17.0.) Declare a Transact-SQL variable and initialize it with a value, you want to send (insert, update or filter by) to the database. 자세한 내용은 아래의 Always Encrypted에 대한 매개 변수화를 참조하세요.See Parameterization for Always Encrypted below for details.
    > [!NOTE] > Always Encrypted는 형식 변환의 제한된 하위 집합을 지원하므로 대부분의 경우 Transact-SQL 변수의 데이터 형식은 대상으로 하는 대상 데이터베이스 열의 형식과 같아야 합니다.As Always Encrypted support a limited subset of type conversions, in many cases it is required that data type of a Transact-SQL variable is the same as the type of the target database column, it targets.
  4. 데이터베이스에 TRANSACT-SQL 변수 값을 전송하는 쿼리를 실행합니다.Run your query sending the value of the Transact-SQL variable to the database. SSMS은 이 변수를 쿼리 매개 변수로 변환하고 해당 값을 암호화하여 데이터베이스로 전송합니다.SSMS will convert the variable to a query parameter and it will encrypt its value before sending it to the database.

예제 Example
SSNchar(11) 테이블의 암호화된 Patients 열이라고 가정할 경우, 아래 스크립트는 Always Encrypted가 데이터베이스 연결에 사용되고, Always Encrypted에 대한 매개 변수화가 쿼리 편집기 창에 사용하도록 설정되며, '795-73-9838' 열에 대해 구성된 열 마스터 키에 대한 액세스 권한이 있는 경우 SSN 열에서 LastName 이 포함된 행을 찾아서 SSN 열의 값을 반환합니다.Assuming SSN is an encrypted char(11) column in the Patients table, the below script will attempt to find a row containing '795-73-9838' in the SSN column and return the value of the LastName column, providing Always Encrypted is enabled for the database connection, Parameterization for Always Encrypted is enabled for the Query Editor window, and you have access to the column master key configured for the SSN column.

always-encrypted-patients

데이터베이스 연결에 Always Encrypted 사용 및 사용 안 함 Enabling and disabling Always Encrypted for a database connection

데이터베이스 연결에 Always Encrypted를 사용하도록 설정하면 SQL Server Management Studio에서 사용하는 .NET Framework Data Provider for SQL Server가 다음 작업을 투명하게 시도합니다.Enabling Always Encrypted for a database connection instructs the .NET Framework Data Provider for SQL Server, used by SQL Server Management Studio, to attempt to transparently:

  • 암호화된 열에서 검색된 값의 암호를 해독하여 쿼리 결과에 반환합니다.Decrypt any values that are retrieved from encrypted columns and returned in query results.
  • 암호화된 데이터베이스 열을 대상으로 하는 매개 변수화된 TRANSACT-SQL 변수의 값을 암호화합니다.Encrypt the values of the parameterized Transact-SQL variables that target encrypted database columns.
    데이터베이스 연결에 Always Encrypted를 사용하도록 설정하려면 Column Encryption Setting=Enabled 서버에 연결 대화 상자의 추가 속성 탭에서 를 지정합니다.To enable Always Encrypted for a database connection, specify Column Encryption Setting=Enabled in the Additional Properties tab of the Connect to Server dialog.
    데이터베이스 연결에 Always Encrypted를 사용하지 않도록 설정하려면 Column Encryption Setting=Disabled 서버에 연결 대화 상자의 추가 속성 탭에서 열 암호화 설정 의 설정을 제거하거나 을 지정합니다(기본값은 사용 안 함).To disable Always Encrypted for a database connection, specify Column Encryption Setting=Disabled or simply remove the setting of Column Encryption Setting from the Additional Properties tab of the Connect to Server dialog (its default value is Disabled).

기존 쿼리 편집기 창에 대해 Always Encrypted의 사용을 설정하거나 해제하려면 다음을 수행합니다.To toggle between Always Encrypted being enabled and disabled for an existing Query Editor window:

  1. 쿼리 편집기 창의 아무 곳이나 마우스 오른쪽 단추로 클릭합니다.Right-click anywhere in the Query Editor window.
  2. 연결 > 연결 변경...을 선택합니다.Select Connection > Change Connection …,
  3. 옵션을 클릭합니다.Click Options >>,
  4. 추가 속성 탭을 선택하고 Column Encryption Setting=Enabled(Always Encrypted 동작 사용)를 입력하거나 설정을 제거(Always Encrypted 동작 사용 안 함)합니다.Select the Additional Properties tab and type Column Encryption Setting=Enabled (to enable the Always Encrypted behavior) or remove the setting (to disable the Always Encrypted behavior).
  5. 연결을 클릭합니다.Click Connect.

Always Encrypted에 대한 매개 변수화Parameterization for Always Encrypted

Always Encrypted에 대한 매개 변수화는 Transact-SQL 변수를 쿼리 매개 변수(SqlParameter 클래스의 인스턴스)로 자동으로 변환하는 SQL Server Management Studio의 기능입니다.Parameterization for Always Encrypted is a feature in SQL Server Management Studio that automatically converts Transact-SQL variables into query parameters (instances of SqlParameter Class). SSMS 버전 17.0 이상이 필요합니다. 이 기능을 사용하면 기본 .NET Framework Data Provider for SQL Server이 암호화된 열을 대상으로 하는 데이터를 검색하고, 이러한 데이터를 데이터베이스로 전송하기 전에 암호화합니다.(Requires at least SSMS version 17.0.) This allows the underlying .NET Framework Data Provider for SQL Server to detect data targeting encrypted columns, and to encrypt such data before sending it to the database.

매개 변수화하지 않으면 .NET Framework Data Provider가 쿼리 편집기에서 작성한 각 문을 매개 변수화되지 않은 쿼리로 전달합니다.Without parameterization, the .NET Framework Data Provider passes each statement, you author in the Query Editor, as a non-parameterized query. 쿼리에 암호화된 열을 대상으로 하는 리터럴 또는 Transact-SQL 변수가 포함된 경우 .NET Framework Data Provider for SQL Server는 쿼리를 데이터베이스로 전송하기 전에 검색 및 암호화할 수 없습니다.If the query contains literals or Transact-SQL variables that target encrypted columns, the .NET Framework Data Provider for SQL Server will not be able to detect and encrypt them, before sending the query to the database. 따라서 일반 텍스트 리터럴 Transact-SQL 변수와 암호화된 열 간의 형식 불일치로 인해 쿼리에 실패합니다.As a result, the query will fail due to type mismatch (between the plaintext literal Transact-SQL variable and the encrypted column). 예를 들어 SSN 열이 암호화된 것으로 가정할 경우 매개 변수화하지 않으면 다음 쿼리가 실패합니다.For example, the following query will fail without parameterization, assuming the SSN column is encrypted.

DECLARE @SSN NCHAR(11) = '795-73-9838'
SELECT * FROM [dbo].[Patients]
WHERE [SSN] = @SSN

Always Encrypted에 대한 매개 변수화 사용/사용 안 함Enabling/Disabling Parameterization for Always Encrypted

Always Encrypted에 대한 매개 변수화를 기본적으로 사용하지 않도록 설정됩니다.Parameterization for Always Encrypted is disabled by default.

현재 쿼리 편집기 창에 Always Encrypted에 대한 매개 변수화를 사용하도록/사용하지 않도록 설정하려면 다음을 수행합니다.To enable/disable Parameterization for Always Encrypted for the current Query Editor window:

  1. 주 메뉴에서 쿼리 를 선택합니다.Select Query from the main menu.
  2. 쿼리 옵션...을 선택합니다.Select Query Options….
  3. 실행 > 고급으로 이동합니다.Navigate to Execution > Advanced.
  4. Always Encrypted에 대해 매개 변수화 사용을 선택하거나 선택 취소합니다.Select or unselect Enable Parameterization for Always Encrypted.
  5. 확인을 클릭합니다.Click OK.

향후 쿼리 편집기 창에 Always Encrypted에 대한 매개 변수화를 사용하도록/사용하지 않도록 설정하려면 다음을 수행합니다.To enable/disable Parameterization for Always Encrypted for future Query Editor windows:

  1. 주 메뉴에서 도구 를 선택합니다.Select Tools from the main menu.
  2. 옵션...을 선택합니다.Select Options….
  3. 쿼리 실행 > SQL Server > 고급으로 이동합니다.Navigate to Query Execution > SQL Server > Advanced.
  4. Always Encrypted에 대해 매개 변수화 사용을 선택하거나 선택 취소합니다.Select or unselect Enable Parameterization for Always Encrypted.
  5. 확인을 클릭합니다.Click OK.

Always Encrypted가 설정된 데이터베이스 연결을 사용하지만 매개 변수화가 사용되지 않는 쿼리 편집기 창에서 쿼리를 실행하는 경우 사용하도록 설정하라는 메시지가 나타납니다.If you execute a query in a Query Editor window that uses a database connection with Always Encrypted enabled, but parameterization is not enabled for the Query Editor window, you will be prompted to enable it.

참고

Always Encrypted에 대해 매개 변수화는 Always Encrypted가 설정된 데이터베이스 연결을 사용하는 쿼리 편집기 창에서만 작동합니다( 데이터베이스에 Always Encrypted 사용/사용 안 함참조).Parameterization for Always Encrypted works only in Query Editor windows that use database connections with Always Encrypted enabled (see Enabling and disabling Always Encrypted for a database). 쿼리 편집기 창에서 Always Encrypted가 설정되지 않은 데이터베이스 연결을 사용하는 경우에는 Transact-SQL 변수가 매개 변수화되지 않습니다.No Transact-SQL variables will be parameterized if the Query Editor window uses a database connection without Always Encrypted enabled.

Always Encrypted에 대한 매개 변수화의 작동 방식How Parameterization for Always Encrypted works

쿼리 편집기 창에 대해 데이터베이스 연결에서 Always Encrypted에 대한 매개 변수화와 Always Encrypted 동작이 둘 다 사용하도록 설정된 경우 SQL Server Management Studio는 다음 필수 조건을 충족하는 Transact-SQL 변수를 매개 변수화합니다.If both Parameterization for Always Encrypted and the Always Encrypted behavior in the database connection are enabled for a Query Editor window, SQL Server Management Studio will attempt parameterize Transact-SQL variables that meet the following pre-requisite conditions:

  • 동일한 문에 선언되고 초기화된 변수(인라인 초기화).Are declared and initialized in the same statement (inline initialization). 별도의 SET 문을 사용하여 선언된 변수는 매개 변수화되지 않습니다.Variables declared using separate SET statements will not be parameterized.
  • 단일 리터럴을 사용하여 초기화된 변수.Are initialized using a single literal. 연산자나 함수가 포함된 식을 사용하여 초기화된 변수는 매개 변수화되지 않습니다.Variables initialized using expressions including any operators or functions will not be parameterized.

다음은 SQL Server Management Studio가 매개 변수화하는 변수의 예입니다.Below are examples of variable, SQL Server Management Studio will parameterize.

DECLARE @SSN char(11) = '795-73-9838';

DECLARE @BirthDate date = '19990104';
DECLARE @Salary money = $30000;

또한 SQL Server Management Studio가 매개 변수화하지 않는 변수의 몇 가지 예도 있습니다.And, here are a few examples of variables SQL Server Management Studio will not attempt to parameterize:

DECLARE @Name nvarchar(50); --Initialization seperate from declaration
SET @Name = 'Abel';

DECLARE @StartDate date = GETDATE(); -- a function used instead of a literal

DECLARE @NewSalary money = @Salary * 1.1; -- an expression used instead of a literal

시도한 매개 변수화가 성공하려면For an attempted parameterization to succeed:

  • 매개 변수화할 변수의 초기화에 사용된 리터럴 형식이 변수 선언의 형식과 일치해야 합니다.The type of the literal used for the initialization of the variable to be parametrized, must match the type in the variable declaration.
  • 변수의 선언된 형식이 날짜 형식이거나 시간 형식인 경우 변수는 다음 ISO 8601 규격 형식 중 하나를 사용하는 문자열을 사용하여 초기화되어야 합니다.If the declared type of the variable is a date type or a time type, the variable must be initialized using a string using one of the following ISO 8601-compliant formats.

매개 변수화 오류가 발생하는 TRANSACT-SQL 변수 선언의 예는 다음과 같습니다.Here are the examples of Transact-SQL variable declarations that will result in parameterization errors:

DECLARE @BirthDate date = '01/04/1999' -- unsupported date format   

DECLARE @Number int = 1.1 -- the type of the literal does not match the type of the variable   

SQL Server Management Studio는 Intellisense를 사용하여 성공적으로 매개 변수화할 수 있는 변수와 매개 변수화 시도에 실패하는 변수(및 이유)를 알려 줍니다.SQL Server Management Studio uses Intellisense to inform you which variables can be successfully parameterized and which parameterization attempts fail (and why).

성공적으로 매개 변수화할 수 있는 변수의 선언은 쿼리 편집기에 경고 밑줄로 표시됩니다.A declaration of a variable that can be successfully parameterized is marked with a warning underline in the Query Editor. 경고 밑줄이 표시된 선언 문에 마우스를 놓으면 결과 SqlParameter 개체(매핑된 변수)의 키 속성 값( SqlDbType, Size, Precision, Scale, SqlValue)을 포함하여 매개 변수화 프로세스의 결과가 표시됩니다.If you hover on a declaration statement that got marked with a warning underline, you will see the results of the parameterization process, including the values of the key properties of the resulting SqlParameter object (the variable is mapped to): SqlDbType, Size, Precision, Scale, SqlValue. 오류 목록 보기의 경고 탭에서 성공적으로 매개 변수화된 모든 변수의 전체 목록을 볼 수 있습니다.You can also see the complete list of all variables that have been successfully parameterized in the Warning tab of the Error List view. 오류 목록 보기를 열려면 주 메뉴에서 보기 를 선택한 다음 오류 목록을 선택합니다.To open the Error List view, select View from the main menu and then select Error List.

SQL Server Management Studio가 변수를 매개 변수화하려고 시도했지만 매개 변수화에 실패한 경우 해당 변수의 선언이 오류 밑줄로 표시됩니다.If SQL Server Management Studio has attempted to parameterize a variable, but the parameterization has failed, the declaration of the variable will be marked with an error underline. 오류 밑줄이 표시된 선언문 위에 마우스를 놓으면 오류에 대한 결과가 표시됩니다.If you hover on the declaration statement that has been marked with an error underline, you will get the results about the error. 오류 목록 보기의 오류 탭에서 모든 변수에 대한 전체 매개 변수화 오류 목록을 볼 수도 있습니다는.You can also see the complete list of parameterization errors for all variables in the Error tab of the Error List view. 오류 목록 보기를 열려면 주 메뉴에서 보기 를 선택한 다음 오류 목록을 선택합니다.To open the Error List view, select View from the main menu and then select Error List.

아래 스크린샷은 6개 변수 선언의 예를 보여 줍니다.The below screenshot shows an example of six variable declarations. SQL Server Management Studio에서 처음 세 개의 변수를 성공적으로 매개 변수화했습니다.SQL Server Management Studio successfully parameterized the first three variables. 마지막 세 변수는 매개 변수화에 대한 필수 조건을 충족하지 않았으므로 SQL Server Management Studio에서 매개 변수화를 시도하지 않았습니다(선언이 표시되지 않음).The last three variables did not meet the pre-requisite conditions for parameterization, and therefore, SQL Server Management Studio did not attempt to parameterize them (their declarations are not marked in any way).

always-encrypted-parameter-warnings

아래의 또 다른 예제는 매개 변수화에 대한 필수 조건을 충족하지만 변수가 잘못 초기화되어 매개 변수화 시도에 실패한 두 변수를 보여 줍니다.Another example below, shows two variables that meet pre-requisite conditions for parameterization, but the parameterization attempt has failed because the variables are incorrectly initialized.

always-encrypted-error

참고

Always Encrypted는 형식 변환의 제한된 하위 집합을 지원하므로 대부분의 경우 Transact-SQL 변수의 데이터 형식은 대상으로 하는 대상 데이터베이스 열의 형식과 같아야 합니다.As Always Encrypted supports a limited subset of type conversions, in many cases it is required that the data type of a Transact-SQL variable is the same as the type of the target database column, it targets. 예를 들어 SSN 테이블의 Patients 열 형식이 char(11)이라고 가정할 경우, 아래 쿼리는 @SSN 변수의 형식( nchar(11))이 열 형식과 일치하지 않으므로 실패합니다.For example, assuming type of the SSN column in the Patients table is char(11), the below query will fail, as the type of the @SSN variable, which is nchar(11), does not match the type of the column.

DECLARE @SSN nchar(11) = '795-73-9838'
SELECT * FROM [dbo].[Patients]
WHERE [SSN] = @SSN;
Msg 402, Level 16, State 2, Line 5   
The data types char(11) encrypted with (encryption_type = 'DETERMINISTIC', 
encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', 
column_encryption_key_database_name = 'Clinic') collation_name = 'Latin1_General_BIN2' 
and nchar(11) encrypted with (encryption_type = 'DETERMINISTIC', 
encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', 
column_encryption_key_database_name = 'Clinic') are incompatible in the equal to operator.

참고

매개 변수화를 사용하지 않으면 형식 변환을 포함하여 전체 쿼리가 SQL Server/Azure SQL Database 내에서 처리됩니다.Without parameterization, the entire query, including type conversions, is processed inside SQL Server/Azure SQL Database. 매개 변수화를 사용하면 일부 형식 변환이 SQL Server Management Studio 내의 .NET Framework에서 수행됩니다.With parameterization enabled, some type conversions are performed by .NET Framework inside SQL Server Management Studio. .NET Framework 형식 시스템과 SQL Server 형식 시스템 간의 차이(예: float와 같은 일부 형식의 정밀도 차이)로 인해 매개 변수화를 사용하여 실행된 쿼리는 매개 변수화를 사용하지 않고 실행된 쿼리와 다른 결과를 생성할 수 있습니다.Due to differences between the .NET Framework type system and the SQL Server type system (e.g. different precision of some types, such as float), a query executed with parameterization enabled can produce different results than the query executed without parameterization enabled.

PermissionsPermissions

암호 텍스트 데이터를 검색하는 쿼리를 포함하여 암호화된 열에 대해 쿼리를 실행하려면 데이터베이스에서 VIEW ANY COLUMN MASTER KEY DEFINITIONVIEW ANY COLUMN ENCRYPTION KEY DEFINITION 권한이 있어야 합니다.To run any queries against encrypted columns, including queries that retrieve data in ciphertext, you need the VIEW ANY COLUMN MASTER KEY DEFINITION and VIEW ANY COLUMN ENCRYPTION KEY DEFINITION permissions in the database.
위 권한 외에도 쿼리 결과의 암호를 해독하거나 쿼리 매개 변수(Transact-SQL 변수를 매개 변수화하여 생성된)를 암호화하려면 대상 열을 보호하는 열 마스터 키에 대한 액세스 권한도 필요합니다.In addition to the above permissions, to decrypt any query results or to encrypt any query parameters (produced by parameterizing Transact-SQL variables), you also need access to the column master key protecting the target columns:

  • 인증서 저장소 - 로컬 컴퓨터 - 열 마스터 키로 사용되는 인증서에 대한 Read 권한이 있거나 컴퓨터의 관리자여야 합니다.Certificate Store – Local computer You must have Read access to the certificate that is used a column master key, or be the administrator on the computer.
  • Azure 주요 자격 증명 모음 – 열 마스터 키를 포함하는 자격 증명 모음에 대한 get, unwrapKey및 verify 권한이 필요합니다.Azure Key Vault You need the get, unwrapKey, and verify permissions on the vault containing the column master key.
  • CNG(키 저장소 공급자) – 저장소 및 KSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Key Store Provider (CNG) The required permission and credentials, you might be prompted for when using a key store or a key, depend on the store and the KSP configuration.
  • CAPI(암호화 서비스 공급자) – 저장소 및 KSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Cryptographic Service Provider (CAPI) The required permission and credentials, you might be prompted for when using a key store or a key, depend on the store and the CSP configuration.

자세한 내용은 열 마스터 키 만들기 및 저장(상시 암호화)를 참조하세요.For more information, see Create and Store Column Master Keys (Always Encrypted).

열 마스터 키(새 열 마스터 키) 프로비전Provisioning Column Master Keys (New Column Master Key)

새 열 마스터 키 대화 상자에서 열 마스터 키를 생성하거나 키 저장소를 통해 기존 키를 선택하고 데이터베이스에서 생성된 키 또는 선택한 키에 대한 열 마스터 키 메타데이터를 만들 수 있습니다.The New Column Master Key dialog allows you to generate a column master key or pick an existing key in a key store, and create column master key metadata for the created or selected key in the database.

  1. 개체 탐색기를 사용하여 데이터베이스 아래의 보안>상시 암호화 키 폴더로 이동합니다.Using Object Explorer, navigate to the Security>Always Encrypted Keys folder under your database.
  2. 열 마스터 키 폴더를 마우스 오른쪽 단추로 클릭하고 새 열 마스터 키...를 선택합니다.Right click on the Column Master Keys folder and select New Column Master Key….
  3. 새 열 마스터 키 대화 상자에서 열 마스터 키 메타데이터 개체의 이름을 입력합니다.In the New Column Master Key dialog, enter the name of the column master key metadata object.
  4. 키 저장소를 선택합니다.Select a key store:

    • 인증서 저장소 - 현재 사용자 – 개인 저장소인 Windows 인증서 저장소의 현재 사용자 인증서 저장소 위치를 나타냅니다.Certificate Store – Current User – indicates the Current User certificate store location in the Windows Certificate Store, which is your personal store.
    • 인증서 저장소 - 로컬 컴퓨터 – Windows 인증서 저장소의 로컬 컴퓨터 인증서 저장소 위치를 나타냅니다.Certificate Store – Local computer – indicates the Local computer certificate store location in the Windows Certificate Store.
    • Azure 주요 자격 증명 모음 – Azure에 로그인해야 합니다( 로그인클릭).Azure Key Vault – you will need to sign in to Azure (click Sign in). 로그인하면 Azure 구독 및 주요 자격 증명 모음 중 하나를 선택할 수 있습니다.Once you sign in, you will be able to pick one of your Azure subscriptions and a key vault.
    • CNG(키 저장소 공급자) – CNG(Cryptography Next Generation) API를 구현하는 KSP(키 저장소 공급자)를 통해 액세스할 수 있는 키 저장소를 나타냅니다.Key Store Provider (CNG) – indicates a key store that is accessible via a key store provider (KSP) that implements the Cryptography Next Generation (CNG) API. 일반적으로 이 유형의 저장소는 HSM(하드웨어 보안 모듈)입니다.Typically, this type of a store is a hardware security module (HSM). 이 옵션을 선택한 후 KSP를 선택해야 합니다.After you select this option, you will need to pick a KSP. 기본적으로Microsoft 소프트웨어 키 저장소 공급자 가 선택되어 있습니다.Microsoft Software Key Store Provider is selected by default. HSM에 저장된 열 마스터 키를 사용하려는 경우 장치에 대해 KSP를 선택합니다(대화 상자를 열기 전에 컴퓨터에 설치 및 구성해야 함).If you want to use a column master key stored in an HSM, select a KSP for your device (it must be installed and configured on the computer before you open the dialog).
    • CAPI(암호화 서비스 공급자) - CAPI(암호화 API)를 구현하는 CSP(암호화 서비스 공급자)를 통해 액세스할 수 있는 키 저장소입니다.Cryptographic Service Provider (CAPI) - a key store that is accessible via a cryptographic service provider (CSP) that implements the Cryptography API (CAPI). 일반적으로 이러한 저장소는 HSM(하드웨어 보안 모듈)입니다.Typically, such a store is a hardware security module (HSM). 이 옵션을 선택한 후 CSP를 선택해야 합니다.After you select this option, you will need to pick a CSP. HSM에 저장된 열 마스터 키를 사용하려는 경우 장치에 대해 CSP를 선택합니다(대화 상자를 열기 전에 컴퓨터에 설치 및 구성해야 함).If you want to use a column master key stored in an HSM, select a CSP for your device (it must be installed and configured on the computer before you open the dialog).

    참고

    CAPI가 사용되지 않는 API이기 때문에 CAPI(암호화 서비스 공급자) 옵션은 기본적으로 비활성화되어 있습니다.Since CAPI is a deprecated API, the Cryptographic Service Provider (CAPI) option is disabled by default. Windows 레지스트리에서 [HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\sql13\Tools\Client\Always Encrypted] 키 아래에 CAPI Provider Enabled DWORD 값을 만들고 1로 설정하면 사용할 수 있습니다.You can enable by creating the CAPI Provider Enabled DWORD value under the [HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\sql13\Tools\Client\Always Encrypted] key in Windows Registry, and setting it to 1. 키 저장소가 CNG를 지원하는 한, CAPI 대신 CNG를 사용해야 합니다.You should use CNG instead of CAPI, unless your key store does not support CNG.

    위의 키 저장소에 대한 자세한 내용은 열 마스터 키 만들기 및 저장(상시 암호화)를 참조하세요.For more information about the above key stores, see Create and Store Column Master Keys (Always Encrypted).

  5. 키 저장소에서 기존 키를 선택하거나 키 생성 또는 인증서 생성 단추를 클릭하여 키 저장소에 키를 만듭니다.Pick an existing key in your key store, or click the Generate Key or Generate Certificate button, to create a key in the key store.

  6. 확인 을 클릭하면 새 키가 목록에 표시됩니다.Click OK and the new key will show up in the list.

SQL Server Management Studio에서 데이터베이스에 열 마스터 키에 대한 메타데이터를 만듭니다.SQL Server Management Studio will create metadata for your column master key in the database. 대화 상자에서 이 작업을 위해 CREATE COLUMN MASTER KEY(Transact-SQL) 문을 생성하고 실행합니다.The dialog achieves this by generating and issuing a CREATE COLUMN MASTER KEY (Transact-SQL) statement.

열 암호화 키(새 열 암호화 키) 프로비전Provisioning Column Encryption Keys (New Column Encryption Key)

새 열 암호화 키 대화 상자에서 새 열 암호화 키를 생성하고, 열 마스터 키로 암호화하고, 데이터베이스에 열 암호화 키 메타데이터를 만들 수 있습니다.The New Column Encryption Key dialog allows you to generate a column encryption key, encrypt it with a column master key, and create the column encryption key metadata in the database.

  1. 개체 탐색기를 사용하여 데이터베이스 아래의 보안/상시 암호화 키 폴더로 이동합니다.Using Object Explorer, navigate to the Security/Always Encrypted Keys folder under your database.
  2. 열 암호화 키 폴더를 마우스 오른쪽 단추로 클릭하고 새 열 암호화 키...를 선택합니다.Right click on the Column Encryption Keys folder and select New Column Encryption Key….
  3. 새 열 암호화 키 대화 상자에서 열 암호화 키 메타데이터 개체의 이름을 입력합니다.In the New Column Encryption Key dialog, enter the name of the column encryption key metadata object.
  4. 데이터베이스에서 열 마스터 키를 나타내는 메타데이터 개체를 선택합니다.Select a metadata object that represents your column master key in the database.
  5. 확인을 클릭합니다.Click OK.

SQL Server Management Studio에서 새 열 암호화 키를 생성한 다음 데이터베이스에서 선택한 열 마스터 키에 대한 메타데이터를 검색합니다.SQL Server Management Studio will generate a new column encryption key and then it will retrieve the metadata for the column master key you selected from the database. 그런 다음 SQL Server Management Studio는 열 마스터 키 메타데이터를 사용하여 열 마스터 키가 포함된 키 저장소에 연결하고 열 암호화 키를 암호화합니다.SQL Server Management Studio will then use the column master key metadata to contact the key store containing your column master key and encrypt the column encryption key. 마지막으로, 새 열 암호화 키에 대한 메타데이터가 데이터베이스에 생성됩니다.Finally, the metadata for the new column encryption key will be created in the database. 대화 상자에서 이 작업을 위해 CREATE COLUMN ENCRYPTION KEY(Transact-SQL) 문을 생성하고 실행합니다.The dialog achieves this by generating and issuing a CREATE COLUMN ENCRYPTION KEY (Transact-SQL) statement.

PermissionsPermissions

대화 상자에서 열 암호화 키 메타데이터를 만들고 열 마스터 키 메타데이터에 액세스하려면 데이터베이스에서 ALTER ANY ENCRYPTION MASTER KEYVIEW ANY COLUMN MASTER KEY DEFINITION 권한이 있어야 합니다.You need the ALTER ANY ENCRYPTION MASTER KEY and VIEW ANY COLUMN MASTER KEY DEFINITION database permissions in the database for the dialog to create the column encryption key metadata and to access column master key metadata. 키 저장소에 액세스하고 열 마스터 키를 사용하려면 키 저장소 또는/및 키에 대한 사용 권한이 필요할 수 있습니다.To access a key store and use the column master key, you might require permissions on the key store or/and the key:

  • 인증서 저장소 - 로컬 컴퓨터 - 열 마스터 키로 사용되는 인증서에 대한 읽기 권한이 있거나 컴퓨터의 관리자여야 합니다.Certificate Store – Local computer - you must have Read access to the certificate that is used as a column master key, or be the administrator on the computer.
  • Azure 주요 자격 증명 모음 – 열 마스터 키를 포함하는 자격 증명 모음에 대한 get, unwrapKey, wrapKey, signverify 권한이 필요합니다.Azure Key Vault – you need the get, unwrapKey, wrapKey, sign, and verify permissions on the vault containing the column master key.
  • CNG(키 저장소 공급자) – 저장소 및 KSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Key Store Provider (CNG) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the KSP configuration.
  • CAPI(암호화 서비스 공급자) – 저장소 및 CSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Cryptographic Service Provider (CAPI) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the CSP configuration.

자세한 내용은 열 마스터 키 만들기 및 저장(상시 암호화)를 참조하세요.For more information, see Create and Store Column Master Keys (Always Encrypted).

열 마스터 키 순환Rotating Column Master Keys

열 마스터 키 순환은 기존 열 마스터 키를 새 열 마스터 키로 대체하는 프로세스입니다.The rotation of a column master key is the process of replacing an existing column master key with a new column master key. 키가 손상된 경우 또는 암호화 키를 정기적으로 순환하도록 요구하는 조직의 정책이나 규정 준수 규칙을 준수하기 위해 키를 순환해야 할 수 있습니다.You may need to rotate a key if it has been compromised, or in order to comply with your organization’s policies or compliance regulations that mandate cryptographic keys must be rotated on a regular basis. 열 마스터 키 순환에서는 현재 열 마스터 키로 보호된 열 암호화 키의 암호를 해독하고 새 열 마스터 키를 사용하여 다시 암호화한 다음 키 메타데이터를 업데이트합니다.A column master key rotation involves decrypting column encryption keys that are protected with the current column master key, re-encrypting them using the new column master key, and updating the key metadata. 자세한 내용은 상시 암호화를 위한 키 관리 개요를 참조하세요.For more information, see Overview of Key Management for Always Encrypted.

1단계: 새 열 마스터 키 프로비전Step 1: Provision a new column master key

위의 열 마스터 키 프로비전 섹션에 있는 단계를 수행하여 새 열 마스터 키를 프로비전합니다.Provision a new column master key, by following the steps in the Provisioning Column Master Keys section above.

2단계: 새 열 마스터 키로 열 암호화 키 암호화Step 2: Encrypt column encryption keys with the new column master key

열 마스터 키는 일반적으로 하나 이상의 열 암호화 키를 보호합니다.A column master key typically protects one or more column encryption keys. 각 열 암호화 키에는 데이터베이스에 저장된 암호화된 값이 있으며 열 마스터 키로 열 암호화 키를 암호화하는 제품입니다.Each column encryption key has an encrypted value stored in the database, that is the product of encrypting the column encryption key with the column master key. 이 단계에서는 순환할 열 마스터 키로 보호된 각 열 암호화 키를 새 열 마스터 키로 암호화하고 새로 암호화된 값을 데이터베이스에 저장합니다.In this step, encrypt each of the column encryption keys that are protected with the column master key you are rotating, with the new column master key, and store the new encrypted value in the database. 따라서 순환의 영향을 받는 각 열 암호화 키에는 기존 열 마스터 키로 암호화된 값과 새 열 마스터 키로 암호화된 새 값의 두 가지 암호화된 값이 있습니다.As a result, each column encryption key that is affected by the rotation will have two encrypted values: one value encrypted with the existing column master key, and a new value encrypted with the new column master key.

  1. 개체 탐색기를 사용하여 보안>상시 암호화 키>열 마스터 키 폴더로 이동한 다음 순환할 열 마스터 키를 찾습니다.Using Object Explorer, navigate to the Security>Always Encrypted Keys>Column Master Keys folder and locate the column master key you are rotating.
  2. 열 마스터 키를 마우스 오른쪽 단추로 클릭하고 순환을 선택합니다.Right-click on the column master key and select Rotate.
  3. 열 마스터 키 순환 대화 상자의 대상 필드에서, 1단계에서 만든 새 열 마스터 키의 이름을 선택합니다.In the Column Master Key Rotation dialog, select the name of your new column master key, you created in Step 1, in the Target field.
  4. 기존 열 마스터 키로 보호되는 열 암호화 키의 목록을 검토합니다.Review the list of column encryption keys, protected by the existing column master keys. 이러한 키에 회전이 적용됩니다.These keys will be affected by the rotation.
  5. 확인을 클릭합니다.Click OK.

SQL Server Management Studio에서 이전 열 마스터 키로 보호된 열 암호화 키의 메타데이터와 이전 및 새 열 마스터 키의 메타데이터를 가져옵니다.SQL Server Management Studio will obtain the metadata of the column encryption keys that are protected with the old column master key, and the metadata of the old and the new column master keys. 그런 다음 SSMS는 열 마스터 키 메타데이터를 사용하여 이전 열 마스터 키가 포함된 키 저장소에 연결하고 열 암호화 키의 암호를 해독합니다.Then, SSMS will use the column master key metadata to access the key store containing the old column master key and decrypt the column encryption key(s). 이후에 SSMS는 새 열 마스터 키가 포함된 키 저장소에 액세스하여 열 암호화 키의 새로 암호화된 값 집합을 생성한 다음 새 값을 메타데이터에 추가합니다( ALTER COLUMN ENCRYPTION KEY(Transact-SQL) 문 생성 및 실행).Subsequently, SSMS will access the key store holding the new column master key to produce a new set of encrypted values of the column encryption keys, and then it will add the new values to the metadata (generating and issuing ALTER COLUMN ENCRYPTION KEY (Transact-SQL) statements).

참고

이전 열 마스터 키로 암호화된 각 열 암호화 키가 다른 열 마스터 키로 암호화되지 않도록 합니다.Make sure each of the column encryption keys, encrypted with the old column master key, is not encrypted with any other column master key. 즉, 회전이 적용되는 각 열 암호화 키는 데이터베이스에 정확히 하나의 암호화된 값만 포함해야 합니다.In other words, each column encryption key, impacted by the rotation, must have exactly one encrypted value in the database. 영향을 받는 열 암호화 키에 암호화된 값이 두 개 이상 있는 경우 순환을 진행하기 전에 값을 제거해야 합니다(열 암호화 키의 암호화된 값을 제거하는 방법은 4단계 참조).If any affected column encryption key has more than one encrypted value, you need to remove the value before you can proceed with the rotation (see Step 4 on how to remove an encrypted value of a column encryption key).

3단계: 새 열 마스터 키로 응용 프로그램 구성Step 3: Configure your applications with the new column master key

이 단계에서는 순환할 열 마스터 키로 보호된 데이터베이스 열(즉, 순환할 열 마스터 키로 암호화된 열 암호화 키로 암호화된 데이터베이스 열)을 쿼리하는 모든 클라이언트 응용 프로그램이 새 열 마스터 키에 액세스할 수 있는지 확인해야 합니다.In this step you need to make sure that all your client applications that query database columns protected with the column master key that you are rotating can access the new column master key (i.e. database columns encrypted with a column encryption key that is encrypted with the column master key, being rotated). 이 단계는 새 열 마스터 키가 있는 키 저장소의 유형에 따라 달라집니다.This step depends on the type of key store your new column master key is in. 예를 들어For example:

  • 새 열 마스터 키가 Windows 인증서 저장소에 저장된 인증서인 경우 데이터베이스에서 열 마스터 키의 키 경로에 지정된 위치와 동일한 인증서 저장소 위치(현재 사용자 또는 로컬 컴퓨터)에 인증서를 배포해야 합니다.If the new column master key is a certificate stored in Windows Certificate Store, you need to deploy the certificate to the same certificate store location (Current User or Local computer) as the location specified in the key path of your column master key in the database. 응용 프로그램에서 인증서에 액세스할 수 있어야 합니다.The application needs to be able to access the certificate:
    • 인증서가 현재 사용자 인증서 저장소 위치에 저장된 경우 인증서를 응용 프로그램 Windows ID(사용자)의 현재 사용자 저장소로 가져와야 합니다.If the certificate is stored in the Current User certificate store location, the certificate needs to be imported into the Current User store of the application’s Windows identity (user).
    • 인증서가 로컬 컴퓨터 인증서 저장소 위치에 저장된 경우 응용 프로그램의 Windows ID에 인증서에 액세스할 권한이 있어야 합니다.If the certificate is stored in the Local computer certificate store location, the application’s Windows identity must have permission to access the certificate.
  • 새 열 마스터 키가 Microsoft Azure 주요 자격 증명 모음에 저장된 경우 응용 프로그램이 Azure에 인증할 수 있고 키에 대한 액세스 권한이 있도록 응용 프로그램을 구현해야 합니다.If the new column master key is stored in Microsoft Azure Key Vault, the application must be implemented so that it can authenticate to Azure and has permission to access the key.

자세한 내용은 열 마스터 키 만들기 및 저장(상시 암호화)를 참조하세요.For details, see Create and Store Column Master Keys (Always Encrypted).

참고

순환의 이 시점에서는 이전 열 마스터 키와 새 열 마스터 키가 모두 유효하며 데이터에 액세스하는 데 사용할 수 있습니다.At this point in the rotation, both the old column master key and the new column master key are valid and can be used to access the data.

4단계: 이전 열 마스터 키로 암호화된 열 암호화 키 값 정리Step 4: Clean up column encryption key values encrypted with the old column master key

새 열 마스터 키를 사용하도록 모든 응용 프로그램을 구성했으면 데이터베이스에서 이전 열 마스터 키로 암호화된 열 암호화 키 값을 제거합니다.Once you have configured all your applications to use the new column master key, remove the values of column encryption keys that are encrypted with the old column master key from the database. 이전 값을 제거하면 다음 순환을 수행할 준비가 된 것입니다(순환할 열 마스터 키로 보호된 각 열 암호화 키에 정확히 하나의 암호화된 값이 있어야 함).Removing old values will ensure you are ready for the next rotation (remember, each column encryption key, protected with a column master key to be rotated, must have exactly one encrypted value).

이전 열 마스터 키를 보관 또는 제거하기 전에 이전 값을 정리하는 다른 이유는 성능 때문입니다. 암호화된 열을 쿼리할 때 상시 암호화 가능 클라이언트 드라이버가 두 값(이전 값과 새 값)의 암호를 모두 해독해야 할 수도 있습니다.Another reason to clean up the old value before archiving or removing the old column master key, is performance-related: when querying an encrypted column, an Always Encrypted-enabled client driver might need to attempt to decrypt two values: the old value and the new one. 드라이버는 응용 프로그램 환경에서 두 열 마스터 키 중 어떤 것이 유효한지 모르기 때문에 서버에서 암호화된 두 값을 모두 검색합니다.The driver does not know which of the two column master keys is valid in the application’s environment so the driver will retrieve both encrypted values from the server. 사용 불가능한 열 마스터 키로 보호되기 때문에 값 중 하나의 암호 해독에 실패하는 경우(예: 저장소에서 제거된 이전 열 마스터 키) 드라이버는 새 열 마스터 키를 사용하여 다른 값의 암호 해독을 시도합니다.If decrypting one of the values fails, because it is protected with the column master key is that not available (e.g. it is the old column master key that has been removed from the store), the driver will attempt to decrypt another value using the new column master key.

경고

응용 프로그램에 해당 열 마스터 키가 제공되기 전에 열 암호화 키 값을 제거하면 응용 프로그램에서 데이터베이스 열의 암호를 더 이상 해독할 수 없습니다.If you remove the value of a column encryption key before its corresponding column master key has been made available to an application, the application will no longer be able to decrypt the database column.

  1. 개체 탐색기를 사용하여 보안>상시 암호화 키 폴더로 이동한 다음 대체할 기존 열 마스터 키를 찾습니다.Using Object Explorer, navigate to the Security>Always Encrypted Keys folder and locate the existing column master key you want to replace.
  2. 기존 열 마스터 키를 마우스 오른쪽 단추로 클릭하고 정리를 선택합니다.Right-click on your existing column master key and select Cleanup.
  3. 제거할 열 암호화 키 값의 목록을 검토합니다.Review the list of column encryption key values to be removed.
  4. 확인을 클릭합니다.Click OK.

SQL Server Management Studio에서 ALTER COLUMN ENCRYPTION KEY(Transact-SQL) 문을 실행하여 이전 열 마스터 키로 암호화된 열 암호화 키의 암호화된 값을 삭제합니다.SQL Server Management Studio will issue ALTER COLUMN ENCRYPTION KEY (Transact-SQL) statements to drop encrypted values of column encryption keys that are encrypted with the old column master key.

5단계: 이전 열 마스터 키에 대한 메타데이터 삭제Step 5: Delete metadata for your old column master key

데이터베이스에서 이전 열 마스터 키의 정의를 제거하도록 선택한 경우 아래 단계를 따르세요.If you choose to remove the definition of the old column master key from the database, use the below steps.

  1. 개체 탐색기를 사용하여 보안>상시 암호화 키>열 마스터 키 폴더로 이동한 다음 데이터베이스에서 제거할 이전 열 마스터 키를 찾습니다.Using Object Explorer, navigate to the Security>Always Encrypted Keys>Column Master Keys folder and locate the old column master key to be removed from the database.
  2. 이전 열 마스터 키를 마우스 오른쪽 단추로 클릭하고 삭제를 선택합니다.Right-click on the old column master key and select Delete. 이렇게 하면 CREATE COLUMN MASTER KEY(Transact-SQL) 문이 생성 및 실행되어 열 마스터 키 메타데이터를 제거합니다.(This will generate and issue a DROP COLUMN MASTER KEY (Transact-SQL) statement to remove the column master key metadata.)
  3. 확인을 클릭합니다.Click OK.

참고

순환 후에 이전 열 마스터 키를 영구적으로 삭제하지 않는 것이 좋습니다.It is highly recommended you do not permanently delete the old column master key after the rotation. 대신, 이전 열 마스터 키를 현재 키 저장소에 유지하거나 다른 안전한 장소에 보관해야 합니다.Instead, you should keep the old column master key in its current key store or archive it in another secure place. 백업 파일에서 새 열 마스터 키가 구성되기 전의 시점으로 데이터베이스를 복원하는 경우 데이터에 액세스하려면 이전 키가 필요합니다.If you restore your database from a backup file to a point in time before the new column master key was configured, you will need the old key to access the data.

PermissionsPermissions

열 마스터 키를 순환하려면 다음과 같은 데이터베이스 사용 권한이 있어야 합니다.Rotating a column master key requires the following database permissions:

  • ALTER ANY COLUMN MASTER KEY – 새 열 마스터 키에 대한 메타데이터를 만들고 이전 열 마스터 키에 대한 메타데이터를 삭제하는 데 필요합니다.ALTER ANY COLUMN MASTER KEY – required to create metadata for the new column master key and deleting the metadata for the old column master key.
  • ALTER ANY COLUMN ENCRYPTION KEY - 열 암호화 키 메타데이터를 수정하고 새로 암호화된 값을 추가하는 데 필요합니다.ALTER ANY COLUMN ENCRYPTION KEY – required to modify column encryption key metadata (add new encrypted values).
  • VIEW ANY COLUMN MASTER KEY DEFINITION - 열 마스터 키의 메타데이터를 액세스하고 읽는 데 필요합니다.VIEW ANY COLUMN MASTER KEY DEFINITION - required to access and read the metadata of the column master keys.
  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION - 열 암호화 키의 메타데이터를 액세스하고 읽는 데 필요합니다.VIEW ANY COLUMN ENCRYPTION KEY DEFINITION - required to access and read the metadata of the column encryption keys.

또한 키 저장소에서 이전 열 마스터 키와 새 열 마스터 키를 모두 액세스할 수 있어야 합니다.You also need to be able to access both the old column master key and the new column master key in their key stores. 키 저장소에 액세스하고 열 마스터 키를 사용하려면 키 저장소 또는/및 키에 대한 사용 권한이 필요할 수 있습니다.To access a key store and use a column master key, you might require permissions on the key store or/and the key:

  • 인증서 저장소 - 로컬 컴퓨터 - 열 마스터 키로 사용되는 인증서에 대한 읽기 권한이 있거나 컴퓨터의 관리자여야 합니다.Certificate Store – Local computer - you must have Read access to the certificate that is used a column master key, or be the administrator on the computer.
  • Azure 주요 자격 증명 모음 – 열 마스터 키를 포함하는 자격 증명 모음에 대한 create, get, unwrapKey, wrapKey, signverify 권한이 필요합니다.Azure Key Vault – you need the create, get, unwrapKey, wrapKey, sign, and verify permissions on the vault containing the column master key(s).
  • CNG(키 저장소 공급자) – 저장소 및 KSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Key Store Provider (CNG) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the KSP configuration.
  • CAPI(암호화 서비스 공급자) – 저장소 및 CSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Cryptographic Service Provider (CAPI) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the CSP configuration.

자세한 내용은 열 마스터 키 만들기 및 저장(상시 암호화)를 참조하세요.For more information, see Create and Store Column Master Keys (Always Encrypted).

열 암호화 키 순환Rotating Column Encryption Keys

열 암호화 키를 순환하려면 모든 열에서 순환할 키로 암호화된 데이터의 암호를 해독하고 새 열 암호화 키를 사용하여 데이터를 다시 암호화해야 합니다.Rotating a column encryption key involves decrypting the data in all columns that are encrypted with the key to be rotated out, and re-encrypting the data using the new column encryption key.

참고

순환할 키로 암호화된 열을 포함하는 테이블이 크면 열 암호화 키를 순환하는 데 시간이 오래 걸릴 수 있습니다.Rotating a column encryption key can take a very long time if the tables containing columns encrypted with the key being rotated are large. 데이터를 다시 암호화하는 동안에는 응용 프로그램이 영향을 받는 테이블에 쓸 수 없습니다.While the data is being re-encrypted, your applications cannot write to the impacted tables. 따라서 조직에서 열 암호화 키 순환을 계획할 때는 주의해야 합니다.Therefore, your organization needs to plan a column encryption key rotation very carefully. 열 암호화 키를 순환하려면 상시 암호화 마법사를 사용합니다.To rotate a column encryption key, use the Always Encrypted Wizard.

  1. 데이터베이스에 대한 마법사를 엽니다. 데이터베이스를 마우스 오른쪽 단추로 클릭하고 작업을 가리킨 다음 열 암호화를 클릭합니다.Open the wizard for your database: right-click your database, point to Tasks, and then click Encrypt Columns.
  2. 소개 페이지를 검토하고 다음을 클릭합니다.Review the Introduction page, and then click Next.
  3. 열 선택 페이지에서 테이블을 확장하고 이전 열 암호화 키로 현재 암호화된, 바꾸려는 열을 모두 찾습니다.On the Column Selection page, expand the tables and locate all columns you want to replace that are currently encrypted with the old column encryption key.
  4. 이전 열 암호화 키로 암호화된 각 열에 대해 암호화 키 를 자동 생성된 새 키로 설정합니다.For each column encrypted with the old column encryption key, set Encryption Key to a new auto-generated key. 참고: 또는 마법사를 실행하기 전에 새 열 암호화 키를 만들 수 있습니다. 위의 열 암호화 키 프로비전 섹션을 참조하세요.Note: Alternatively, you can create a new column encryption key before running the wizard – see the Provisioning Column Encryption Keys section above.
  5. 마스터 키 구성 페이지에서 새 키를 저장할 위치를 선택하고 마스터 키 원본을 선택한 후 다음을 클릭합니다.On the Master Key Configuration page, select a location to store the new key, and select a master key source, and then click Next. 참고: 자동 생성된 열 암호화 키가 아니라 기존 열 암호화 키를 사용하는 경우에는 이 페이지에서 수행할 작업이 없습니다.Note: If you are using an existing column encryption key (not an auto-generated one), there is no action to perform on this page.
  6. 유효성 검사페이지에서 스크립트를 즉시 실행할지 아니면 PowerShell 스크립트를 만들지 선택하고 다음을 클릭합니다.On the Validation page, choose whether to run the script immediately or create a PowerShell script, and then click Next.
  7. 요약 페이지에서 선택한 옵션을 검토하고 마침 을 클릭합니다. 완료되면 마법사를 닫습니다.On the Summary page, review the options you have selected, and then click Finish and close the wizard when completed.
  8. 개체 탐색기를 사용하여 보안/상시 암호화 키/열 암호화 키 폴더로 이동한 다음 데이터베이스에서 제거할 이전 열 암호화 키를 찾습니다.Using Object Explorer, navigate to the Security/Always Encrypted Keys/Column Encryption Keys folder and locate your old column encryption key, to be removed from the database. 키를 마우스 오른쪽 단추로 클릭하고 삭제를 선택합니다.Right-click on the key and select Delete.

PermissionsPermissions

열 암호화 키를 순환하려면 다음과 같은 데이터베이스 권한이 있어야 합니다. ALTER ANY COLUMN MASTER KEY – 자동 생성된 새 열 암호화 키를 사용하는 경우에 필요합니다(새 열 마스터 키와 새 메타데이터도 생성됨).Rotating a column encryption key requires the following database permissions: ALTER ANY COLUMN MASTER KEY – required if you use a new auto-generated column encryption key (a new column master key and its new metadata will also be generated). ALTER ANY COLUMN ENCRYPTION KEY – 새 열 암호화 키에 대한 메타데이터를 추가하는 데 필요합니다.ALTER ANY COLUMN ENCRYPTION KEY –required to add metadata for the new 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. VIEW ANY COLUMN ENCRYPTION KEY DEFINITION - 열 암호화 키의 메타데이터를 액세스하고 읽는 데 필요합니다.VIEW ANY COLUMN ENCRYPTION KEY DEFINITION - required to access and read the metadata of the column encryption keys.

또한 새 열 암호화 키와 이전 열 암호화 키 둘 다의 열 마스터 키에 액세스할 수 있어야 합니다.You also need to be able to access column master keys for both the new and the old column encryption key. 키 저장소에 액세스하고 열 마스터 키를 사용하려면 키 저장소 또는/및 키에 대한 사용 권한이 필요할 수 있습니다.To access a key store and use a column master key, you might require permissions on the key store or/and the key:

  • 인증서 저장소 - 로컬 컴퓨터 - 열 마스터 키로 사용되는 인증서에 대한 읽기 권한이 있거나 컴퓨터의 관리자여야 합니다.Certificate Store – Local computer - you must have the Read access to the certificate that is used a column master key, or be the administrator on the computer.
  • Azure 주요 자격 증명 모음 – 열 마스터 키를 포함하는 자격 증명 모음에 대한 get, unwrapKey 및 verify 권한이 필요합니다.Azure Key Vault – you need the get, unwrapKey, and verify permissions on the vault containing the column master key.
  • CNG(키 저장소 공급자) – 저장소 및 KSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Key Store Provider (CNG) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the KSP configuration.
  • CAPI(암호화 서비스 공급자) – 저장소 및 CSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Cryptographic Service Provider (CAPI) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the CSP configuration.

자세한 내용은 열 마스터 키 만들기 및 저장(상시 암호화)를 참조하세요.For more information, see Create and Store Column Master Keys (Always Encrypted).

데이터베이스 또는 DACPAC에서 상시 암호화를 사용하는 경우 DAC 업그레이드 작업 수행Performing DAC Upgrade Operations when Database or DACPAC uses Always Encrypted

DAC 작업 은 암호화된 열을 포함하는 스키마가 있는 DACPAC 파일 및 데이터베이스에서 지원됩니다.DAC operations are supported on DACPAC files and databases with schemas containing encrypted columns. DAC 업그레이드 작업에는 특별한 고려 사항이 적용됩니다. SSMS를 비롯한 다양한 도구에서 DAC 업그레이드 작업을 수행하는 방법은 데이터 계층 응용 프로그램 업그레이드 를 참조하세요.Special considerations apply to the DAC upgrade operation – see Upgrade a Data-tier Application on how to perform a DAC upgrade operation in various tools, including SSMS.

DACPAC를 사용하여 데이터베이스를 업그레이드하고 DACPAC 또는 대상 데이터베이스에 암호화된 열이 있는 경우 다음 조건이 모두 충족되면 업그레이드 작업에서 데이터 암호화 작업을 트리거합니다.When you upgrade a database using a DACPAC and either the DACPAC or the target database has encrypted columns, the upgrade operation will trigger a data encryption operation if all of the following conditions are met:

  • 데이터베이스에 데이터를 포함하는 열이 있습니다.The database contains a column with data.
  • DACPAC에 동일한 열이 있습니다.The same column exists in the DACPAC.
  • 데이터베이스에 있는 열의 암호화 구성이 DACPAC에 있는 해당 열의 구성과 다릅니다.The encryption configuration of the column in the database is different than the configuration the corresponding column in the DACPAC. 자세한 내용은 아래 표를 참조하세요.Please, see the below table for details.
조건Condition 동작Action
DACPAC에서는 열이 암호화되고 데이터베이스에서는 암호화되지 않습니다.The column is encrypted in the DACPAC and it is not encrypted in the database. 열의 데이터가 암호화됩니다.The data in the column will be encrypted.
DACPAC에서는 열이 암호화되지 않고 데이터베이스에서는 암호화됩니다.The column is not encrypted in the DACPAC and it is encrypted in the database. 열의 데이터 암호가 해독됩니다(열에 대한 암호화가 제거됨).The data in the column will be decrypted (the encryption will be removed for the column).
DACPAC와 데이터베이스 둘 다에서 열이 암호화되지만 DACPAC의 열은 데이터베이스의 해당 열과 다른 암호화 유형 또는/및 다른 열 암호화 키를 사용합니다.The column is encrypted both in the DACPAC and the database, but the column in the DACPAC uses a different encryption type or/and a different column encryption key than the corresponding column in the database. 열의 데이터 암호가 해독된 다음 DACPAC의 암호화 구성에 맞게 다시 암호화됩니다.The data in the column will be decrypted and then re-encrypted to match the encryption configuration in the DACPAC.

참고

데이터베이스 또는 DACPAC의 열에 대해 구성된 열 마스터 키가 Azure 주요 자격 증명 모음에 저장된 경우 Azure에 로그인하라는 메시지가 표시됩니다(로그인하지 않은 경우).If the column master key configured for the column in the database or the DACPAC is stored in Azure Key Vault, you will be prompted to sign in to Azure (if you're not already signed in).

PermissionsPermissions

DACPAC 또는 대상 데이터베이스에서 상시 암호화가 설정된 경우 DAC 업그레이드 작업을 수행하려면 DACPAC의 스키마와 대상 데이터베이스 스키마 간의 차이에 따라 아래 사용 권한 중 일부 또는 모두가 필요할 수 있습니다.To perform a DAC upgrade operation if Always Encrypted is setup in the DACPAC or in the target database, you might need some or all of the below permissions, depending on the differences between the schema in the DACPAC and the target database schema.

ALTER ANY COLUMN MASTER KEY, ALTER ANY COLUMN ENCRYPTION KEY, VIEW ANY COLUMN MASTER KEY DEFINITION, VIEW ANY COLUMN ENCRYPTION KEY DEFINITIONALTER ANY COLUMN MASTER KEY, ALTER ANY COLUMN ENCRYPTION KEY, VIEW ANY COLUMN MASTER KEY DEFINITION, VIEW ANY COLUMN ENCRYPTION KEY DEFINITION

업그레이드 작업이 데이터 암호화 작업을 트리거하는 경우 영향을 받는 열에 대해 구성된 열 마스터 키에도 액세스할 수 있어야 합니다.If the upgrade operation triggers a data encryption operation, you also need to be able to access column master keys configured for the impacted columns:

  • 인증서 저장소 - 로컬 컴퓨터 - 열 마스터 키로 사용되는 인증서에 대한 읽기 권한이 있거나 컴퓨터의 관리자여야 합니다.Certificate Store – Local computer - you must have Read access to the certificate that is used a column master key, or be the administrator on the computer.
  • Azure 주요 자격 증명 모음 – 열 마스터 키를 포함하는 자격 증명 모음에 대한 create, get, unwrapKey, wrapKey, signverify 권한이 필요합니다.Azure Key Vault – you need the create, get, unwrapKey, wrapKey, sign, and verify permissions on the vault containing the column master key.
  • CNG(키 저장소 공급자) – 저장소 및 KSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Key Store Provider (CNG) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the KSP configuration.
  • CAPI(암호화 서비스 공급자) – 저장소 및 CSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Cryptographic Service Provider (CAPI) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the CSP configuration.

자세한 내용은 열 마스터 키 만들기 및 저장(상시 암호화)를 참조하세요.For more information, see Create and Store Column Master Keys (Always Encrypted).

BACPAC를 사용하여 암호화된 열이 있는 데이터베이스 마이그레이션Migrating Databases with Encrypted Columns using BACPAC

데이터베이스를 내보낼 때 암호화된 열에 저장된 모든 데이터가 검색되어 결과 BACPAC (암호화된 형태)에 저장됩니다.When you export a database, all data stored in encrypted columns are retrieved and put into the resulting BACPAC (in encrypted form). 결과 BACPAC에는 상시 암호화 키에 대한 메타데이터도 포함됩니다.The resulting BACPAC also contains the metadata for Always Encrypted keys.

BACPAC를 데이터베이스로 가져올 때 BACPAC의 암호화된 데이터가 데이터베이스에 로드되고 상시 암호화 키 메타데이터가 다시 생성됩니다.When you import the BACPAC into a database, the encrypted data from the BACPAC is loaded into the database and Always Encrypted key metadata is re-created.

원본 데이터베이스(내보낸 데이터베이스)에 저장된 암호화된 데이터를 수정하거나 검색하도록 구성된 응용 프로그램이 있는 경우 두 데이터베이스의 키가 동일하기 때문에 응용 프로그램이 대상 데이터베이스의 암호화된 데이터를 쿼리할 수 있도록 특별히 수행해야 하는 작업은 없습니다.If you have an application that is configured to modify or retrieve the encrypted data stored in the source database (the one you exported), you do not need to do anything special to enable the application to query the encrypted data in the target database, as the keys in both databases are the same.

PermissionsPermissions

원본 데이터베이스에 대한 ALTER ANY COLUMN MASTER KEYALTER ANY COLUMN ENCRYPTION KEY 권한이 필요합니다.You need ALTER ANY COLUMN MASTER KEY and ALTER ANY COLUMN ENCRYPTION KEY on the source database. 대상 데이터베이스에 대한 ALTER ANY COLUMN MASTER KEY, ALTER ANY COLUMN ENCRYPTION KEY, VIEW ANY COLUMN MASTER KEY DEFINITIONVIEW ANY COLUMN ENCRYPTION 권한이 필요합니다.You need ALTER ANY COLUMN MASTER KEY, ALTER ANY COLUMN ENCRYPTION KEY, VIEW ANY COLUMN MASTER KEY DEFINITION, and VIEW ANY COLUMN ENCRYPTION on the target database.

SQL Server 가져오기 및 내보내기 마법사를 사용하여 암호화된 열이 있는 데이터베이스 마이그레이션Migrating Databases with Encrypted Columns using SQL Server Import and Export Wizard

SQL Server 가져오기 및 내보내기 마법사 를 사용할 경우 BACPAC 파일에 비해 데이터 마이그레이션 중 암호화된 열에 저장된 데이터의 처리 방법을 보다 자세하게 제어할 수 있습니다.Compared to using BACPAC files, the SQL Server Import and Export Wizard gives you more control over how the data stored in encrypted columns are handled during the data migration.

  • 데이터 원본이 상시 암호화를 사용하는 데이터베이스인 경우 암호화된 열에 저장된 데이터가 내보내기 작업 중 암호 해독되거나 암호화된 상태로 유지되도록 데이터 원본 연결을 구성할 수 있습니다.If your data source is a database using Always Encrypted, you can configure your data source connection so that the data stored in encrypted columns is decrypted during the export operation, or remains encrypted.
  • 데이터 대상이 상시 암호화를 사용하는 데이터베이스인 경우 암호화된 열을 대상으로 하는 데이터가 암호화되도록 데이터 대상 연결을 구성할 수 있습니다.If your data target is a database using Always Encrypted, you can configure your data target connection so that the data targeting encrypted columns is encrypted.

암호 해독(데이터 원본) 또는 암호화(데이터 대상)를 사용할 수 있으려면 .NET Framework Data Provider for SqlServer 를 사용하도록 데이터 원본/대상 연결을 구성해야 하며, 열 암호화 설정 연결 문자열 키워드를 사용으로 설정해야 합니다.To enable decryption (for the data source) or encryption (for the data target), you need to configure your data source/target connection to use the .Net Framework Data Provider for SqlServer and you need to set the Column Encryption Setting connection string keywords to Enabled.

아래 표에서는 가능한 마이그레이션 시나리오와 각 연결에 대한 데이터 원본 및 데이터 대상 구성과 함께 상시 암호화와 어떤 관계가 있는지를 보여 줍니다.The below table lists possible migration scenarios and how they relate to Always Encrypted along with the data source and data target configuration for each connection.

시나리오Scenario 원본 연결 구성Source Connection Configuration 대상 연결 구성Target Connection Configuration
마이그레이션 시 데이터를 암호화합니다. 데이터가 일반 텍스트로 데이터 원본에 저장되고 데이터 대상의 암호화된 열로 마이그레이션됩니다.Encrypt data on migration (the data is stored as plaintext in the data source, and is migrated to encrypted columns in the data target). 데이터 공급자/드라이버: 임의Data provider/driver: any

열 암호화 설정 = 사용 안 함Column Encryption Setting = Disabled

(.Net Framework Data Provider for SqlServer 및 .NET Framework 4.6 이상을 사용하는 경우)(if .Net Framework Data Provider for SqlServer and .NET Framework 4.6 or later are used.)
데이터 공급자/드라이버: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 이상 필요)Data provider/driver: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 or later required)

열 암호화 설정 = 사용Column Encryption Setting = Enabled
마이그레이션 시 데이터 암호를 해독합니다. 데이터가 데이터 원본의 암호화된 열에 저장되고 데이터 대상에 일반 텍스트로 마이그레이션됩니다. 데이터 대상이 데이터베이스인 경우 대상 열은 암호화되지 않습니다.Decrypt data on migration (the data is stored in encrypted columns in the data source, and it is migrated in plaintext to the data target; if the data target is a database, the target columns are not encrypted).

참고: 마이그레이션 전에 암호화된 열이 포함된 대상 테이블이 있어야 합니다.Note: the target tables with encrypted columns must exist prior to the migration.
데이터 공급자/드라이버: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 이상 필요)Data provider/driver: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 or later required)

추가 속성Column Encryption Setting=Enabled
데이터 공급자/드라이버: 임의Data provider/driver: any

열 암호화 설정 = 사용 안 함Column Encryption Setting = Disabled

(.Net Framework Data Provider for SqlServer 및 .NET Framework 4.6 이상을 사용하는 경우)(if .Net Framework Data Provider for SqlServer and .NET Framework 4.6 or later are used.)
마이그레이션 시 데이터를 다시 암호화합니다. 데이터가 데이터 원본의 암호화된 열에 저장되고 열 암호화 키의 다른 암호화 유형을 사용하는 데이터 대상의 열에 일반 텍스트로 마이그레이션됩니다.Re-encrypt data on migration (the data is stored in encrypted columns in the data source, and it is migrated in plaintext to the data target to the columns that use different encryption types of column encryption keys).

참고: 마이그레이션 전에 암호화된 열이 포함된 대상 테이블이 있어야 합니다.Note: the target tables with encrypted columns must exist prior to the migration.
데이터 공급자/드라이버: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 이상 필요)Data provider/driver: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 or later required)

추가 속성Column Encryption Setting=Enabled
데이터 공급자/드라이버: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 이상 필요)Data provider/driver: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 or later required)

추가 속성Column Encryption Setting=Enabled
암호를 해독하지 않고 암호화된 데이터를 이동합니다.Move encrypted data without decrypting it.

참고: 마이그레이션 전에 암호화된 열이 포함된 대상 테이블이 있어야 합니다.Note: the target tables with encrypted columns must exist prior to the migration.
데이터 공급자/드라이버: 임의Data provider/driver: any
열 암호화 설정 = 사용 안 함Column Encryption Setting = Disabled

(.Net Framework Data Provider for SqlServer 및 .NET Framework 4.6 이상을 사용하는 경우)(if .Net Framework Data Provider for SqlServer and .NET Framework 4.6 or later are used.)
데이터 공급자/드라이버: 임의Data provider/driver: any
열 암호화 설정 = 사용 안 함Column Encryption Setting = Disabled

(.Net Framework Data Provider for SqlServer 및 .NET Framework 4.6 이상을 사용하는 경우)(if .Net Framework Data Provider for SqlServer and .NET Framework 4.6 or later are used.)

사용자에 대해 ALLOW_ENCRYPTED_VALUE_MODIFICATIONS가 ON으로 설정되어 있어야 합니다.The user must have ALLOW_ENCRYPTED_VALUE_MODIFICATIONS set to ON.

자세한 내용은 상시 암호화로 보호되는 중요한 데이터 마이그레이션을 참조하세요.For details, see Migrate Sensitive Data Protected by Always Encrypted.

PermissionsPermissions

데이터 원본에 저장된 데이터를 암호화 또는 암호 해독 하려면 원본 데이터베이스에 대한 VIEW ANY COLUMN MASTER KEY DEFINITIONVIEW ANY COLUMN ENCRYPTION KEY DEFINITION 권한이 있어야 합니다.To encrypt or decrypt data stored in the data source, you need the VIEW ANY COLUMN MASTER KEY DEFINITION and VIEW ANY COLUMN ENCRYPTION KEY DEFINITION permissions in the source database.

암호화했거나 암호를 해독할 데이터를 저장하는 열에 대해 구성된 열 마스터 키도 액세스할 수 있어야 합니다.You also need access to column master keys, configured for the columns, storing data you are encrypted or decrypting:

  • 인증서 저장소 - 로컬 컴퓨터 - 열 마스터 키로 사용되는 인증서에 대한 읽기 권한이 있거나 컴퓨터의 관리자여야 합니다.Certificate Store – Local computer - you must have the Read access to the certificate that is used a column master key, or be the administrator on the computer.
  • Azure 주요 자격 증명 모음 – 열 마스터 키를 포함하는 자격 증명 모음에 대한 get, unwrapKey, wrapKey, sign 및 verify 권한이 필요합니다.Azure Key Vault – you need the get, unwrapKey, wrapKey, sign, and verify permissions on the vault containing the column master key.
  • CNG(키 저장소 공급자) – 저장소 및 KSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Key Store Provider (CNG) – the required permission and credentials, you might be prompted for when using a key store or a key, depend on the store and the KSP configuration.
  • CAPI(암호화 서비스 공급자) – 저장소 및 KSP 구성에 따라 키 저장소 또는 키를 사용할 때 필수 사용 권한 및 자격 증명을 확인하는 메시지가 표시될 수도 있습니다.Cryptographic Service Provider (CAPI) – the required permission and credentials, you might be prompted for when using a key store or a key, depend on the store and the CSP configuration. 자세한 내용은 열 마스터 키 만들기 및 저장(상시 암호화)를 참조하세요.For more information, see Create and Store Column Master Keys (Always Encrypted).

참고 항목See Also