MySQL 데이터베이스를 암호화하는 좋은 방법은 무엇입니까? 있지만 암호 해독 키에 액세스 할 수없는

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

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

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



답변

최소 필드 레벨 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 연결 이 필요 합니다.

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


답변

MariaDB는 최근 InnoDB 및 XtraDB 테이블에 대한 테이블 레벨 암호화를 추가했습니다.
https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#specifying-what-tables-to-encrypt

MySQL은 또한 InnoDB에 대한 테이블 수준 암호화를 지원합니다.
https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html


답변

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

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

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