SQL Server 2016 에 추가된 기능으로 특정 컬럼을 암호화할 수 있는 기능이다.
이때만 해도 내가 이걸 쓰게될줄은 몰랐다.
시작하기전에 아래의 몇가지 사항을 이해하고 넘어가면 좋다.
- 열 마스터 키 (CMK) : 열 암호화 키를 보호하는 암호화 키
- 열 암호화 키 (CEK) : 암호화된 열을 보호하는 암호화 키
- 열 마스터 키의 저장소
- Azure Key Vault : Microsoft Azure 내에서 중요한 데이터의 암호화 및 암호 해독에 사용되는 암호화 키 및 비밀을 보호하고 관리하는 데 사용되는 키 자격 증명 모음 (주의사항 이걸 사용하다 그만 써야지 하면 뒷감당이 힘들다.)
- Windows 인증서 저장소 : 인증서를 저장하고 관리하는 Windows에 내장된 인증서 컨테이너
- HSM : 민감한 데이터를 안전하게 저장하도록 특별히 설계된 하드웨어 장치
- 열 수준 암호화 유형
- 결정적 : 항상 동일한 암호문으로 암호화하므로 특정 작업(포인트 조회, 구별, 그룹화 기준)에 사용할 수 있고 인덱싱가능
- 무작위 : 더 안전하지만 어떤 작업에서도 평가하거나 사용할 수 없으며(쓰기/표시 전용) 인덱싱불가
1. 열 마스터 키 만들기 (column master key)
- 개체 탐색기에서 데이터베이스를 선택
- 보안 -> Always Encrypted 키 -> 열 마스터 키
새 열 마스터 키 생성
- 키 저장소 Windows 인증서 저장소 - 로컬 컴퓨터를 선택
인증서 생성
- 인증서 생성 버튼 클릭시 인증서가 생성되며 생성된 정보가 노출된다.
- Windows 인증서 저장소에 인증서가 생성되어 있는지 확인
2. 열 암호화 키 생성 (column encryption key)
- 개체 탐색기에서 데이터베이스를 선택
- 보안 -> Always Encrypted 키 -> 열 암호화 키
새 열 암호화 키 생성
- 새 열 암호화키 생성
생성한 열 마스터 키를 선택하고 열 암호화 키 이름을 입력한다.
3. 테스트 데이터 생성
CREATE TABLE [dbo].[tb_test]
(
[Seq] [int] IDENTITY(1,1),
[Name] [nvarchar](20) not null,
[Phone] [varchar](20) not null,
[Email] [varchar](50) not null,
PRIMARY KEY CLUSTERED ([Seq] ASC)
)
GO
insert into [dbo].[tb_test] values ('홍길동','010-1234-5678','hhhhh@email.com');
insert into [dbo].[tb_test] values ('김길동','010-1234-1234','kim@email.com');
insert into [dbo].[tb_test] values ('최길동','010-5678-5678','choi@email.com');
insert into [dbo].[tb_test] values ('강길동','010-5678-1234','kang@email.com');
insert into [dbo].[tb_test] values ('한길동','010-5678-5678','han@email.com');
GO
select * from [dbo].[tb_test];
4. 열 암호화
- 개체 탐색기에서 데이터베이스를 선택
태스크 -> 열 암호화
- 암호화할 열 선택
5. 데이터 확인 (데이터베이스 서버에서)
- 암호화한 컬럼은 데이터가 암호화되어 확인이 안된다.
- 새 세션으로 접속시 Always Encrypted -> Always Encrypted(열 암호화) 사용 선택후 접속
- 데이터 조회시 오류가 발생한다.
6. Windows 인증서 저장소에 저장된 열 마스터 키 만들때 사용한 인증서 내보내기
- 열 마스터 키를 만들때 사용한 인증서를 내보낸다.
7. 인증서 파일을 클라이언트로 복사하여 등록
- 인증 파일을 더블클릭하면 인증서 가져오기 마법사가 시작된다.
인증서 저장소 위치를 로컬 컴퓨터로 지정한다.
- 인증서 내보내기에서 지정한 암호를 입력한다.
8. 인증서를 가져온 후 클라이언트에서 데이터 조회
'SQL Server' 카테고리의 다른 글
Full Text Catalog 채우기가 동작하지 않을 경우 (0) | 2022.10.25 |
---|---|
Always Encrypted char, nchar 데이터 타입 공백 검색 이슈 (0) | 2022.09.02 |
set ansi_padding off (0) | 2022.09.02 |