2016-01-04 12 views
5

Tôi cần ẩn dữ liệu khỏi quyền truy cập của người dùng trong mysql. Ngay cả khi người dùng biết mật khẩu, họ có thể cần một chìa khóa để giải mã dữ liệu. là nó có thể?Mã hóa AES mặc định của Mysql cho tất cả các bảng trong cơ sở dữ liệu

Trong mysql có tùy chọn AES_ENCRYPT để mã hóa dữ liệu khi chèn, Có tùy chọn nào để cung cấp mã hóa mặc định cho tất cả các cột trong cơ sở dữ liệu không?

+0

Bạn có biết điều gì sẽ xảy ra nếu bạn mã hóa tất cả dữ liệu trong MySQL? – Mjh

+0

Có, tất cả dữ liệu người dùng bao gồm cả bảng Mysql sẽ được mã hóa, từ chối truy cập vào người dùng. Nhưng tôi đang cố gắng mã hóa chỉ cơ sở dữ liệu cụ thể. Đó là tất cả những gì tôi biết, Nếu tôi sai, xin vui lòng sửa tôi –

+0

Hãy xem mẫu này từ MariaDB: https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/ –

Trả lời

0

bạn có thể cần thực hiện việc này trong ứng dụng của mình chứ không phải trực tiếp trong mysql. lưu trữ dữ liệu đã được mã hóa nhưng giải mã/mã hóa trong mã cấp ứng dụng của bạn

0

Điều gì cho phép người dùng kết nối nếu họ không có khóa để giải mã và tất cả các bảng được mã hóa? Bạn cần chỉnh sửa câu hỏi của mình để mô tả chi tiết hơn về trường hợp sử dụng của bạn.

Kiểm soát quyền truy cập cho mỗi người dùng linh hoạt hơn. Giả sử bạn sử dụng mã hóa và một ngày bạn muốn vô hiệu quyền truy cập cho một người dùng cụ thể. Bạn sẽ phải thay đổi khóa và điều đó có nghĩa là bạn phải mã hóa lại tất cả dữ liệu bằng khóa mới và sau đó thông báo cho tất cả những người dùng khác về khóa được cập nhật. Điều đó rất bất tiện.

Trong khi nếu bạn chỉ sử dụng thông tin đăng nhập hoặc các đặc quyền GRANT để kiểm soát quyền truy cập, bạn có thể tắt bất kỳ tài khoản người dùng nào và/hoặc sử dụng REVOKE để thay đổi đặc quyền của họ. Tất cả những người dùng khác sẽ tiếp tục có quyền truy cập mà họ đã làm trước đây. Điều đó dễ hơn nhiều.

Bên cạnh đó, MySQL không có tùy chọn "mã hóa tất cả các bảng" toàn cầu. Nó thậm chí không có tùy chọn mã hóa tất cả dữ liệu được chèn vào một bảng đã cho.

MySQL có một số encryption functions như AES_ENCRYPT() nhưng nó xử lý ở mức độ biểu thức SQL cá nhân:

INSERT INTO MyTable 
SET someColumn = AES_ENCRYPT('Something sensitive', 'thePassword'); 

Bạn sẽ phải làm điều này mỗi khi bạn chèn hoặc cập nhật liên tục.

Sau đó giải mã tương tự mỗi khi bạn CHỌN:

SELECT AES_DECRYPT(someColumn, 'thePassword') FROM MyTable... 

Có người nêu trên mã hóa MariaDB. Điều này không làm những gì bạn muốn. Nó có nghĩa là tệp vùng bảng trên đĩa được mã hóa, nhưng máy chủ MariaDB vẫn tự động giải mã nó cho bất kỳ ai kết nối với máy chủ. Vì vậy, nó không tốt hơn so với đặc quyền truy cập SQL. Nó cũng không mã hóa nhật ký truy vấn hoặc nhật ký lỗi hoặc nhật ký nhị phân.

Các vấn đề liên quan