MySQL 데이터베이스를 암호화하는 좋은 방법은 무엇입니까?


20

데이터베이스의 특정 필드를 암호화 할 수 있지만 데이터베이스의 모든 필드를 암호화하는 데 관심이 있습니다. MySQL 셸에 액세스 할 수는 있지만 암호 해독 키에 액세스 할 수없는 사람은 데이터베이스에서 아무것도 읽을 수 없도록하십시오.

또한 누군가 컴퓨터에 대한 루트 액세스 권한을 가지고 있지만 암호 해독 키가없는 경우 데이터를 읽을 수 없도록하고 싶습니다.

어떻게해야합니까? 하는 것이 합리적입니까? 누군가가 mysql 데이터베이스에 액세스 할 수 있는지 걱정해야합니다. 필자는 불가피하게 키에 액세스 할 수 있으므로 의미가 없습니다. 뭔가 빠졌습니까?


5
DB를 전용 볼륨에 저장하고 dm-crypt 및 LUKS로 암호화하는 것을 고려 했습니까? 물론, 그것은 당신이 요구하는 것이 아니지만 모든 것이 암호화됩니다. GPG로 키 파일을 암호화 할 수도 있습니다.
dsljanus

답변:


10

최소 필드 레벨 AES 및 DES 암호화가 가능합니다 : https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

모든 쿼리에 대해 키를 지정하지 않고 (또는 트리거 / 프로 시저에 추가하지 않고) 데이터를 읽을 수있는 사람은 없습니다.

예:

끼워 넣다:

INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));

선택 :

SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'root';

또한 데이터베이스에 대한 SSL 연결 이 필요 합니다.

또한 하위 수준에서 파일 시스템도 암호화 할 수 있습니다.


2
참고 : 데이터베이스가 로컬이 아닌 경우 연결을 암호화해야합니다. 그렇지 않으면 암호와 키가 네트워크를 통해 일반 텍스트로 전송됩니다. security.stackexchange.com/questions/45838/…
Aaron Digulla

AES, MD5는 오래되었으며 악용되었습니다. 새로운 암호화 란 무엇입니까?
YumYumYum

나는 이것이 필드를 암호화 / 해독하는 방법의 예일 뿐이지 만 암호를 예로 사용하는 것은 나쁜 생각입니다. 암호화 유무에 관계없이 데이터베이스에 해시되지 않은 비밀번호가 없어야합니다.
Caedmon

이 답변은 필드 수준 암호 해독에 관한 것이지만 질문은 "mysql 데이터베이스를 암호화하는 좋은 방법"입니다 ... ... "데이터베이스의 특정 필드를 암호화 할 수는 있지만 모든 암호화에 관심이 있습니다. 데이터베이스의 필드입니다. "
LarsH


2

첫째 : 응용 프로그램과 함께 키를 저장하고 응용 프로그램 계층에서 모든 암호화를 처리합니다.

다음 : MySQL 인스턴스와 응용 프로그램 [서버]가 별도의 컴퓨터에 있어야 MySQL 서버의 루트 손상으로 인해 공격자가 응용 프로그램 소스에서 키를 읽을 수 없습니다.

이 접근법은 과도하게 보입니다. 민감한 데이터 (암호, 신용 카드 등)를 올바르게 처리하지만 모든 것을 암호화하는 것은 과도합니다. (기본 키 세계에서는 생산성이 떨어질 수 있습니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.