mysql 데이터베이스를 암호화하는 좋은 방법은 무엇이며, 그만한 가치가 있습니까?

mysql 데이터베이스를 암호화하는 좋은 방법은 무엇이며, 그만한 가치가 있습니까?

데이터베이스의 특정 필드를 암호화할 수 있다는 것을 알고 있지만 데이터베이스의 모든 필드를 암호화하는 데 관심이 있습니다. 나는 mysql 쉘에 접근할 수는 있지만 암호 해독 키에 접근할 수 없는 사람이 데이터베이스에서 어떤 것도 읽을 수 없도록 하고 싶습니다.

또한 누군가가 시스템에 대한 루트 액세스 권한을 얻었지만 암호 해독 키가 없으면 데이터를 읽을 수 없는지 확인하고 싶습니다.

어떻게 해야 하나요? 하는 것이 합리적입니까? 누군가가 mysql 데이터베이스에 액세스할 수 있다면 필연적으로 키에 액세스하게 될 것이라는 우려가 있으므로 이는 말이 되지 않습니다. 뭔가 빠졌나요?

답변1

최소한의 필드 수준 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

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

답변3

첫째, 애플리케이션과 함께 키를 저장하고 애플리케이션 계층에서 모든 암호화를 처리합니다.

다음: MySQL 서버의 루트 손상으로 인해 공격자가 애플리케이션 소스에서 키를 읽는 것을 허용하지 않도록 MySQL 인스턴스와 애플리케이션[서버]이 별도의 시스템에 있는지 확인합니다.

이런 접근 방식은 지나친 것 같습니다. 민감한 데이터(비밀번호, 신용카드 등)를 적절하게 처리하지만 모든 것을 암호화하는 것은 과잉입니다. (그리고 기본 키 세계에서는 역효과를 낳을 가능성이 높습니다)

관련 정보