Project

General

Profile

Actions

New Function #546

closed

[INFRA] DB 암호화

Added by Jisoo Choi 6 months ago. Updated 4 months ago.

Status:
Closed
Priority:
Normal
Assignee:
Start date:
08/13/2024
Due date:
% Done:

0%

Estimated time:
Spent time:

Description

 

 

코레일유통 DB암호화 DAMO DA-MYQ 사용자 설명서 전달드립니다

 

설치된 DA 제품은 DBMS에 암호화,복호화 함수를 생성하여 쿼리에 함수로 데이터를 직접 암호화하는 기능을 제공합니다

Scp database를 생성하여 함수를 만들어 두었습니다

암호화, 복호화 함수는 총 2개의 인자값을 가지며 첫번째는 암호화 정책명으로 KEY1 으로 설정해두었습니다

두번째 값은 암호화,복호화 대상 데이터입니다

 

암호화 함수 예시는 아래와 같습니다.

사용 예시)

암호화 : select scp.enc_b64('KEY1','test');

복호화 : select scp.dec_b64('KEY1',scp.enc_b64('KEY1','test'));

 

또한 암호화 후 데이터 길이가 길어지므로 암호화 적용 전에 미리 컬럼 길이를 변경해두어야 합니다

암호화 후 변경되는 컬럼 길이 확인은 아래 내용과 첨부파일을 참고 바랍니다

 

 

 

n 암호화 후 컬럼 길이 확인 방법

*사진 첨부

 

 

 

n 암호화/복호화 상세 방법

D'Amo_DA-MYQ_v5.0.52_사용자_설명서(SL4) (1).pdf 의 77~80p 

 

 

 

n DB 암호화 대상

1) 주문 정보(st_order)
: 주문자연락처(orderer_phone), 수령자명(receiver_name), 수령자연락처(receiver_phone), 배송지우편번호(delivery_zipcode), 배송지주소(delivery_address), 배송지보조주소(delivery_sub_address)

2) 결제 정보(st_order_payment)
: 예금주명(holder_name), 환불계좌번호(refund_account_number), 환불예금주명(refund_holder_name)

3) 사용자(st_user)
: 이름(username), 휴대전화번호(hp), 이메일(email), 우편번호(zipcode), 주소(address), 보조주소(subaddress), 사내메일(company_email)

4) 탈퇴회원 정보(st_withdraw_user)
: 이름(username), 휴대전화번호(hp), 이메일(email), 우편번호(zipcode), 주소(address), 보조주소(subaddress), 사내메일(company_email)

 

 

 

 


Files

Actions #1

Updated by Jisoo Choi 5 months ago

 

 

 

기존에 korail_store 계정이 mysql Database에 권한이 없어 쿼리 조회가 불가했는데(root로만 가능), 

현재 select 권한을 부여하여 암호화 함수 조회 가능하도록 수정되었다고 합니다.

 

 

 

Actions #2

Updated by Jisoo Choi 5 months ago

 

 

 

DB 암호화 테스트를 위해서 운영 DB의 scp에 koral_store의 데이터 이전을 부탁드립니다.

*scp의 데이터로 테스트해서 확인 진행하려고 합니다.

 

 

 

Actions #3

Updated by Deca Park 5 months ago

  • Assignee changed from Deca Park to Toby Pham

[ADMIN] / [API] 

1.config.properties
  1) dev
    #db encryption flag
    db.encrypt.proc=N
  2) prod
    #db encryption flag
    db.encrypt.proc=Y

2.Target DB (table/column)

  - apply DB encrypt/decrypt into target DB

  1) st_order (6 colmns)
    - orderer_phone / receiver_name / receiver_phone / delivery_zipcode / delivery_address / delivery_sub_address
  2) st_order_payment (3 colmns)
    - holder_name / refund_account_number / refund_holder_name
  3) st_user (7 colmns)
    - username / hp / email / zipcode / address / sub_address / company_email
  4) st_withdraw_user (7 colmns)
    - username / hp / email / zipcode / address / sub_address / company_email

3.TO-DO : apply logic (Mapper.xml)

  1) INSERT / UPDATE Target DB (table/column)
    - when INSERT INTO VALUES
    a) if db.encrypt.proc is 'Y'
      - scp.enc_b64('KEY1',{value})
    b) else
      - same as current
  2) SELECT Target DB (table/column)
    - when SELECT 
    a) if db.encrypt.proc is 'Y'
      - scp.dec_b64('KEY1',{encryptValue})
    b) else
      - same as current

Actions #4

Updated by Toby Pham 5 months ago

  • Status changed from New to In Progress
Actions #5

Updated by Toby Pham 5 months ago

  • Status changed from In Progress to Resolved
  • Assignee changed from Toby Pham to Deca Park
Actions #6

Updated by Deca Park 5 months ago

  • Status changed from Resolved to Feedback
  • Assignee changed from Deca Park to Toby Pham

[Review Source]

1.properties

  - apply with "KEY1"
  db.encrypt.key=KEY1

2.DB function

  - scp is applied ??

  scp.enc_b64
  scp.dec_b64

3.EncryptSQLInterceptor

  - apply into just target Mapper (or Mapper > sql) to avoid unnecessary process

  1) logic (my idea)
    - define target Mapper (or Mapper > sql) as constant
    - check it

[Test Issue]

EncryptSQLInterceptor

 1) as-is: INSERT/UPDATE/SELECT SQL: you checked if all target SQL has encryptField (findEncryptFields())
 2) to-be: add target mapper check logic to avoid non-related SQL execution

Actions #7

Updated by Toby Pham 5 months ago

Simple scp functions

CREATE DATABASE scp;
USE scp;

CREATE FUNCTION dec_b64(key_value varchar(4000), i_value varchar(4000)) returns varchar(4000)
BEGIN
    return i_value;
END;

CREATE FUNCTION enc_b64(key_value varchar(4000), i_value varchar(4000)) returns varchar(4000)
BEGIN
    return i_value;
USE;
Actions #8

Updated by Toby Pham 5 months ago

  • Status changed from Feedback to Resolved
  • Assignee changed from Toby Pham to Deca Park
Actions #9

Updated by Jisoo Choi 5 months ago

 

 

DB 암호화 테스트를 위한 서버 접속 정보 전달 드립니다.

코레일 테스트 서버
- server ip : 211.188.68.209
- id : stone
- pw : Stone1!

 

 

 

Actions #10

Updated by Deca Park 4 months ago

[API] /api/withdraw (회원탈퇴)

1.server error happens when INSERT st_withdraw_order
  1) As-is
    - {st_withdraw_user} data is created without {st_withdraw_order} data
  2) To-be
    - apply one tranaction

Actions #11

Updated by Deca Park 4 months ago

  • Assignee changed from Deca Park to Jisoo Choi

[운영 DB 암호화 테스트]

1.암화화 테스트 DB

  • database: korail_store_encrypt

2.테스트 URL

  1) ADMIN

  2) APP

3.기타

  • 업로드 파일 복사 안된 관계로 이미지 출력 안되는 것 고려
Actions #12

Updated by Jisoo Choi 4 months ago

  • Status changed from Resolved to Closed
Actions #13

Updated by Jisoo Choi 4 months ago

 

(기록)

■ 스토리 오더 주문 상태
- (작업 전) 결제대기중 1,568건 / 주문확정 116건 / 수령대기중 3건 / 수령완료 5,785건 / 주문자취소(주문취소) 252건 / 자동확정 9,739건 / 매장취소(주문취소) 5,014건 / 매장취소(환불) 434건
- (작업 전) 결제대기중 1,568건 / 주문확정 116건 / 수령대기중 3건 / 수령완료 5,785건 / 주문자취소(주문취소) 252건 / 자동확정 9,739건 / 매장취소(주문취소) 5,014건 / 매장취소(환불) 434건


■ 스토리 오더 주문 건수
- (작업 전) 22,911건
- (작업 후) 22,911건


■ st_user 
- (작업 전) 회원 수(탈퇴 회원 포함): 8,639건
- (작업 후) 회원 수(탈퇴 회원 포함): 8,639건


■ st_withdraw_user
- (작업 전) 탈퇴 회원 수: 171건
- (작업 전) 탈퇴 회원 수: 171건


■ 테스트 데이터 (회원 정보)
(작업 전/후) 
- 이름: 최지수 / ZDauDZg4IHSh2Id5S0h+Pw==
- 휴대전화번호: 01091485641 / 3TFAam6domwh2zG+PA4prA==
- 이메일: t@daum.net / eXl4PcvJ2G6XLnMmyEMJGQ==
*수정했을 경우 McxjFginG0A6r2R4InAiDg==
- 우편번호: 13536 / fDyNbfEyMrQfa39YmLJAdQ==
- 주소: 경기 성남시 분당구 판교역로10번길 3 / wZKWbuyPU7kHxEVmLM65sq//hH5VwgBcccXA2uHh/09KRkFOV1PPfUGKHnF8IISOtn824cbvv6zqgkr3UO6/XQ==


■ 테스트 데이터 (주문 정보)
정상 확인 완료
 

 

Actions

Also available in: Atom PDF