Cách tốt để mã hóa cơ sở dữ liệu mysql là gì và nó có đáng không?


20

Tôi biết tôi có thể mã hóa các trường cụ thể của cơ sở dữ liệu, nhưng tôi quan tâm đến việc mã hóa mọi lĩnh vực của cơ sở dữ liệu. Tôi muốn đảm bảo rằng không ai có quyền truy cập vào trình bao mysql nhưng ai không có quyền truy cập vào khóa giải mã thì không thể đọc bất cứ điều gì từ cơ sở dữ liệu.

Tôi cũng muốn đảm bảo rằng nếu ai đó có quyền truy cập root vào máy, nhưng không có khóa giải mã, họ không thể đọc dữ liệu.

Làm thế nào tôi nên làm điều này? Liệu nó có ý nghĩa để làm? Tôi lo ngại nếu ai đó có quyền truy cập vào cơ sở dữ liệu mysql thì chắc chắn họ sẽ có quyền truy cập vào khóa, vì vậy điều này vô nghĩa. Tui bỏ lỡ điều gì vậy?


5
Bạn đã xem xét việc lưu trữ DB trên một ổ đĩa chuyên dụng và mã hóa nó bằng dm-crypt và LUKS chưa? Chắc chắn, đó không phải là những gì bạn yêu cầu, nhưng mọi thứ sẽ được mã hóa. Bạn thậm chí có thể mã hóa keyfile bằng GPG.
dsljanus

Câu trả lời:


10

Mã hóa AES và DES tối thiểu, cấp trường có sẵn: https://dev.mysql.com/doc/refman/5.5/en/encoding-fifts.html#feft_encrypt

Không ai có thể đọc dữ liệu mà không chỉ định khóa cho mọi truy vấn (hoặc không thêm nó vào trình kích hoạt / thủ tục).

thí dụ:

CHÈN:

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

và CHỌN:

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

Ngoài ra, điều này yêu cầu kết nối SSL với cơ sở dữ liệu.

Và ở cấp độ thấp hơn - bạn cũng có thể mã hóa hệ thống tập tin.


2
Lưu ý: Trừ khi cơ sở dữ liệu là cục bộ, bạn cần mã hóa kết nối bằng cách nào đó hoặc mật khẩu và khóa sẽ được gửi dưới dạng văn bản thuần túy qua mạng. Xem security.stackexchange.com/questions/45838/ từ
Aaron Digulla

AES, MD5 đã cũ và có khai thác. mã hóa mới là gì?
YumYumYum

Tôi biết đây chỉ là một ví dụ về cách mã hóa / giải mã một trường nhưng sử dụng mật khẩu làm ví dụ là một ý tưởng tồi. Bạn không bao giờ nên có mật khẩu chưa được xóa trong cơ sở dữ liệu của mình có hoặc không có mã hóa.
Caedmon

Câu trả lời này là về giải mã cấp trường, nhưng câu hỏi không phải là về điều đó: "một cách tốt để mã hóa cơ sở dữ liệu mysql" ... "Tôi biết tôi có thể mã hóa các trường cụ thể của cơ sở dữ liệu, nhưng tôi quan tâm đến việc mã hóa mọi lĩnh vực cơ sở dữ liệu. "
LarsH


2

Đầu tiên: Bạn lưu trữ khóa của mình với ứng dụng và xử lý tất cả mã hóa ở lớp ứng dụng.

Tiếp theo: bạn đảm bảo rằng phiên bản MySQL và ứng dụng [máy chủ] nằm trên các máy riêng biệt để thỏa hiệp gốc trên máy chủ MySQL không cho phép kẻ tấn công đọc khóa từ nguồn ứng dụng.

Cách tiếp cận này có vẻ quá mức. Xử lý dữ liệu nhạy cảm đúng cách (mật khẩu, thẻ tín dụng, v.v.) nhưng mã hóa mọi thứ là quá mức cần thiết. (Và có khả năng phản tác dụng trong thế giới của các khóa chính)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.