2012-02-13 5 views
2

암호화 된 필드가있는 테이블이 있습니다. MySQL 문서를 살펴본 후 암호화/암호 해독을위한 사용자 지정 데이터 형식을 만들 수 없다는 것을 알았습니다. 이상적입니다. 이 파생 열과 SSN을 가지고 있기 때문에 MySQL 문서를 읽은 후, 나는보기가 삽입 아니라는 것을 배웠어요,MySQL - 암호화 된 열로 작업하기

CREATE VIEW EMPLOYEE AS 
SELECT ID, FIRST_NAME, LAST_NAME, SUPER_SECURE_DECRYPT(SSN) AS SSN 
FROM EMPLOYEE_ENCRYPTED 

다시 : 그래서, 대신, 나는 아래와 같은 전망을 필드는 파생 된 열이므로 업데이트 할 수 없습니다. 그러나 뷰에 트리거를 추가 할 수 없으므로 뷰에 쓰는 것은 실제로 옵션이 아닙니다. 이 문제를 해결 얻기위한 시도

, 나는에 비슷한 트리거의 몇 가지를 만들었습니다 (삽입

CREATE TRIGGER EMPLOYEE_ENCRYPTED_UPDATE 
BEFORE UPDATE ON EMPLOYEE_ENCRYPTED FOR EACH ROW 
BEGIN 
    IF NEW.SSN <> OLD.SSN THEN 
     SET NEW.SSN = SUPER_SECURE_ENCRYPT(NEW.SSN); 
    END IF; 
END; 

뿐만 아니라 하나, 너무 유사하기 때문에, 내가하지 않을거야 게시). 이것은 단순히 뷰에서 읽고 테이블에 써야한다는 것을 의미합니다.

이것은 당신이 암호화 된 컬럼을 조회하는 업데이트 문에 대한 where 절을 공급할 때 (같이 자신의 SSN에 의해 ​​직원을 업데이트) 것을 제외하고는 괜찮은 솔루션 입니다. 일반적으로 업데이트 할 때 기본 키를 사용하기 때문에 문제가되지 않지만이를 수행 할 방법이 있으면 다른 암호화 된 필드를 알아야합니다.

MySQL은 암호화 및 암호 해독을 위해 무거운 짐을 들여 개발자가 최대한 마찰을 일으킬 수 없도록 만들고 싶습니다. 암호화 된 필드를 최대한 사용하면서 암호화 된 필드에 대해 걱정할 필요가없는 응용 프로그램 개발자에게 궁금합니다. 궁극적 인 목표입니다. 도움이나 조언을 주시면 감사하겠습니다.

답변

0

사용중인 암호화 유형을 모른 채 질문에 답변하는 것이 바람직합니다. MD5와 같은 표준 암호화/해시입니다. WHERE ssn=MD5('ssnStr') 유형의 절을 사용하여 MySQL에서 직접 사용할 수 있습니다. MD5는 암호 해독을위한 것이 아닙니다. 이 사용자 암호의 일종인지 그렇지 않으면, 당신은) 하나

1이 암호화/복호화를 수행하는 프로 시저를 작성하고

또는

2)를 수행하여 WHERE 절에 그것을 사용합니다 WHERE 절의 원하는 조건이나 쿼리의 조건과 일치하는 결과를 사용하십시오.

쿼리에 SSN의 암호화 된 값을 입력하고 필드에 일치시키는 것이 가장 좋습니다. DB의 각 행에 대해 일종의 암호 해독을 수행해야하는 경우 이는 효율적이지 않습니다. 즉, 최고의 성능을 위해 저장된 데이터와 직접 일치하는 입력을 쿼리에 제공하십시오.