티스토리 뷰

반응형

2023.12.22 - [Entity Framework Core] - Sql Always Encrypted 사용하기 Part4

2023.12.20 - [Entity Framework Core] - Sql Always Encrypted 사용하기 Part3

2023.11.22 - [Entity Framework Core] - Sql Always Encrypted 사용하기 Part2

2023.11.20 - [Entity Framework Core] - Sql Always Encrypted 사용하기 Part1

 

개인의 민감 정보를 Database에 저장하는 경우에 데이터를 암호화해서 권한이 있는 사람만 내용을 볼 수 있어야 합니다.

데이터를 암호화/복호화하는데 MS SQL에서는 Always Encrypted라는 기술을 지원하고 있습니다.

기본적인 내용은 여기(한글, 영문)를 참고하시기 바랍니다.

한글은 대략적인 내용 파악을 빠르게하기 위해서 사용하시고, 상세 내역은 영문을 참고하시는 것이 좋습니다. 영문이 최신버전으로 업데이트되어도 한글이 업데이트 않되어서 틀린 내용이 있을 수 있기 때문입니다.

1. 기본 기능

일반 Always Encrypted와 Secure Enclave Always Encrypted 2가지를 사용할 수 있습니다.

두가지 기능의 큰 차이점은 암호화된 컬럼을 조건절에서 여러가지 형태로 사용할 수 있는지의 여부에 따라 다르게 구현할 수 있습니다.

아래 2가지 형태의 자습서를 참고하시면 좋습니다. 다만, 영문과 다르게 표현되는 부분이 있으니 영문과 비교하시면 좋습니다.

자습서: Always Encrypted 시작

Secure Enclave Always Encrypted에 대한 설명은 여기를 참고하시기 바랍니다.

자습서: SQL Server에서 보안 Enclave를 사용하여 Always Encrypted 사용 시작

 

아래 이미지를 참고하시면, 암/복호화된 데이터가 어떻게 표현되는지 확인 할 수 있습니다.

SSMS에서 암호화된 데이터를 미인증한 사용자가 조회한 모습입니다. 

 

SSMS에서 암호화된 데이터를 인증한 사용자가 조회한 모습입니다.

2. Alwyas Encrypted  구성하기

Alwyas Encrypted를 이용해서 암/복호화를 하기 위해서는 다음과 같은 준비 사항이 필요합니다.

  • 암/복호화를 위한 2개의 키가 필요합니다. 열 암호화 키(Column encryption keys), 열 마스터 키(Column master keys)
    • 암호화 키는 윈도우 인증서 저장소나 Azure Key Vault에 저장해서 관리합니다.
    • 이 포스트에서는 Azure Key Vault를 이용하는 방법에 대한 설명만 합니다. 이유는 암호화키를 윈도우 인증서 저장소에 관리를 하면, 다른 컴퓨터에서 복호화를 하기 위해서 파일로 다른 컴퓨터로 이동을 시켜야 하기 때문입니다.
  • 데이터베이스 컬럼에 암호화 추가
    • 암호화 방식은 Deterministic(결정적) 암호화, Randomized(임의) 암호화 방식이 있습니다.
    • 컬럼에 암호화를 추가하는 것은 SSMS를 이용해서 간단하게 처리할 수 있습니다.
  • Azure Key Vault를 이용하기 위한 Azure 계정이 필요합니다.

3. SSMS를 이용해서 테이블 생성

자습서에는 HR 스키마를 만들어서 사용하는데, 기 부분 코드는 삭제했습니다.

CREATE TABLE [Employees]
(
    [EmployeeID] [int] IDENTITY(1,1) NOT NULL
    , [SSN] [char](11) NOT NULL
    , [FirstName] [nvarchar](50) NOT NULL
    , [LastName] [nvarchar](50) NOT NULL
    , [Salary] [money] NOT NULL
) ON [PRIMARY];

4. 데이터 추가

INSERT INTO [Employees]
(
    [SSN]
    , [FirstName]
    , [LastName]
    , [Salary]
)
VALUES
(
    '795-73-9838'
    , N'Catherine'
    , N'Abel'
    , $31692
);

INSERT INTO [Employees]
(
    [SSN]
    , [FirstName]
    , [LastName]
    , [Salary]
)
VALUES
(
    '990-00-6818'
    , N'Kim'
    , N'Abercrombie'
    , $55415
);

 

자습서에서는 여기서 열 암호화로 바로 진행하는데, 저는 Azure Key Vault를 사용할 것이기 때문에 Azure 설정으로 넘어갑니다.

반응형
댓글