Mike Benshoof2022-09-20T08. 01. 35-04. 00 Tác giả Mike Benshoof Thông tin chi tiết về DBA, MySQL, Phần mềm Percona, Bảo mật mã hóa, MySQL, mysql và các biến thể Show Trong một bài đăng được viết vào đầu năm nay – Máy chủ Percona cho các lựa chọn và tùy chọn mã hóa MySQL – < . Là một chủ đề phức tạp như vậy, bài đăng đó nhằm làm rõ và làm nổi bật các khía cạnh khác nhau của “mã hóa” ở các cấp độ khác nhau. Gần đây tôi lại thấy chủ đề này xuất hiện, nhưng cụ thể là xung quanh mã hóa cấp độ cột và các tùy chọn khác nhau nên tôi muốn đề cập chi tiết hơn về vấn đề này. I discussed some of the options around encryption in MySQL. Being such a complex topic, that post was meant to clarify and highlight various aspects of “encryption” at different levels. I recently had this topic come up again, but specifically around column-level encryption and various options so I wanted to touch on this in more detail. Kể từ bản phát hành hiện tại của Máy chủ Percona dành cho MySQL, không có cách tích hợp nào để xác định một cột duy nhất là được mã hóa. Lý tưởng nhất là có thể có một số siêu dữ liệu được chuyển trong câu lệnh tạo và điều này sẽ tự động xảy ra, chẳng hạn như điều này TẠO BẢNG pii_data ( user_id int KHÓA CHÍNH không dấu, super_secret varchar(255) ĐƯỢC MÃ HÓA, … … ) ĐỘNG CƠ=InnoDB Rất tiếc, tùy chọn này không khả dụng và chúng tôi cần thực hiện một số thao tác dữ liệu vào hoặc trước thời điểm đọc/ghi Chức năng mã hóa MySQL tích hợpMột trong những cách tiếp cận phổ biến nhất là sử dụng các chức năng mã hóa MySQL tích hợp được mô tả tại đây. https. // nhà phát triển. mysql. com/doc/refman/8. 0/vi/hàm mã hóa. html. Các luồng tiêu chuẩn trông giống như thế này. CHÈN VÀO mytable (id, secret_data) VALUES (1, TO_BASE64(AES_ENCRYPT(“dữ liệu cực kỳ bí mật”, “khóa của tôi”))); MySQL cho phép mã hóa và giải mã dữ liệu bằng thuật toán AES (Advanced Encryption Standard) chính thức Hàm
Hàm
Theo mặc định, các hàm Các hàm này chấp nhận một vectơ khởi tạo (IV) làm đối số tùy chọn thứ ba. IV là bắt buộc đối với một số chế độ mã hóa khối MySQL ENCRYPT() mã hóa một chuỗi bằng lệnh gọi hệ thống Unix crypt(). Hàm trả về một chuỗi nhị phân Vì chức năng này dựa trên lệnh gọi hệ thống Unix crypt() nên trên hệ thống Windows, nó sẽ trả về NULL cú pháp ENCRYPT(string, salt) Tranh luận NameDescriptionstringMột chuỗi sẽ được mã hóa. saltMột chuỗi có ít nhất hai ký tự. Nếu muối ít hơn hai ký tự, hàm sẽ trả về NULL. Nếu đối số này không được đặt, hàm sẽ sử dụng một giá trị ngẫu nhiên để mã hóa Hàm MySQL AES_DECRYPT() giải mã một chuỗi được mã hóa bằng thuật toán AES để trả về chuỗi gốc. Nó trả về NULL nếu phát hiện dữ liệu không hợp lệ cú pháp AES_DECRYPT(crypt_str, key_str); Tranh luận NameDescriptioncrypt_strMột chuỗi được mã hóa. key_strString để sử dụng để giải mã crypt_str Sơ đồ cú pháp Phiên bản MySQL. 5. 6 Thí dụ Mã số
Giải trình Câu lệnh MySQL ở trên giải mã chuỗi 'mytext' được mã hóa bằng mykeystring và trả về chuỗi gốc mytext Đầu ra mẫu mysql> SELECT AES_DECRYPT(AES_ENCRYPT('mytext','mykeystring'),'mykeystring'); +----------------------------------------------------------------+ | AES_DECRYPT(AES_ENCRYPT('mytext','mykeystring'),'mykeystring') | +----------------------------------------------------------------+ | mytext | +----------------------------------------------------------------+ 1 row in set (0.00 sec) bảng mẫu. bảng kiểm tra Mã số
Giải trình Câu lệnh MySQL ở trên truy xuất dữ liệu được giải mã từ cột 'mô tả' được mã hóa từ 'bảng kiểm tra' Làm cách nào để mã hóa một chuỗi trong MySQL?Hàm AES_ENCRYPT của MySQL được sử dụng để mã hóa chuỗi bằng thuật toán Tiêu chuẩn mã hóa nâng cao (AES). Hàm MySQL AES_ENCRYPT mã hóa dữ liệu với độ dài khóa 128 bit nhưng nó có thể được mở rộng lên tới độ dài khóa 256 bit. Nó mã hóa một chuỗi và trả về một chuỗi nhị phân.
Làm cách nào để giải mã chuỗi trong MySQL?Hàm DES_DECRYPT của MySQL được sử dụng để giải mã chuỗi được mã hóa bằng thuật toán DES (Chuẩn mã hóa dữ liệu). Hàm MySQL DES_DECRYPT sử dụng khóa để giải mã chuỗi. Giá trị được trả về bởi hàm DES_DECRYPT là một chuỗi được giải mã hoặc NULL.
Làm cách nào để sử dụng mã hóa trong MySQL?Để kích hoạt mã hóa cho vùng bảng hệ thống mysql, chỉ định tên vùng bảng và tùy chọn ENCRYPTION trong câu lệnh ALTER TABLESPACE . mysql> THAY ĐỔI TABLESPACE mysql ENCRYPTION = 'Y'; .
Làm cách nào để giải mã mã hóa AES trong MySQL?Hàm MySQL AES_DECRYPT trả về chuỗi gốc sau khi giải mã chuỗi được mã hóa. Nó sử dụng thuật toán AES (Advanced Encryption Standard) để thực hiện giải mã. Hàm AES_DECRYPT trả về chuỗi đã giải mã hoặc NULL nếu phát hiện dữ liệu không hợp lệ |