Mã hóa cột mysql

Các phiên bản trên đã được sử dụng cho các thử nghiệm, nhưng cách tiếp cận tương tự cũng có thể được sử dụng trên các phiên bản cơ sở dữ liệu khác

Các ví dụ trong bài viết này tập trung vào cả mã hóa đối xứng và bất đối xứng cho PostgreSQL và chỉ mã hóa đối xứng cho MySQL do giới hạn giấy phép

Giới thiệu

G CP cung cấp một số lớp mã hóa sẵn dùng để bảo vệ dữ liệu (xem hình ảnh bên dưới). Sử dụng nhiều lớp mã hóa sẽ bổ sung khả năng bảo vệ dữ liệu dư thừa và cho phép chúng tôi chọn phương pháp tối ưu dựa trên các yêu cầu của ứng dụng (Nguồn. https. //đám mây. Google. com/security/encryption-at-rest/default-encryption).

Mặc dù một số lớp mã hóa đã sẵn sàng, nhưng đối với một số ngành cụ thể (e. g. FSI) có thể hữu ích hoặc bắt buộc để thêm một lớp bảo mật khác, chẳng hạn như Mã hóa cấp độ trường (hoặc cột)

Mục tiêu của lớp bổ sung là ngăn chặn quyền truy cập vào dữ liệu nhạy cảm của những người thường được phép kết nối với cơ sở dữ liệu hoặc có thể có quyền truy cập độc hại vào HĐH, nhưng không trực quan hóa dữ liệu nhạy cảm (ví dụ:. Tên, Địa chỉ, Số thẻ tín dụng,…) hoặc có thể truy cập vào bộ lưu trữ của máy lưu trữ cơ sở dữ liệu

Mã hóa mức trường (hoặc cột), được mô tả trong tài liệu này, cho phép

  • Mã hóa dữ liệu bằng khóa bên ngoài do khách hàng quản lý trong môi trường khác (ví dụ:. Tại chỗ)
  • Chọn các trường cần được mã hóa và bảo vệ (Cấp độ trường/cột) là gì
  • Chọn các khóa khác nhau để mã hóa các trường khác nhau
  • Ngăn chặn quyền truy cập vào dữ liệu rõ ràng của những người được phép kết nối với cơ sở dữ liệu, nhưng không trực quan hóa dữ liệu nhạy cảm
  • Chỉ cấp quyền truy cập vào các trường nhạy cảm và được bảo vệ cho người dùng và ứng dụng biết khóa bí mật

PostgreSQL 11

P ostgreSQL, mã hóa cấp trường được bật bởi tiện ích mở rộng pgcrypto (Nguồn. https. //www. postgresql. org/docs/9. 6/tĩnh/pgcrypto. html). Tiện ích mở rộng này cũng được hỗ trợ bởi Google CloudSQL (Nguồn. https. //đám mây. Google. com/sql/docs/postgres/tiện ích mở rộng).

Mã hóa đối xứng PostgreSQL

  1. Tạo phiên bản Google CloudSQL PostgreSQL theo tài liệu chuẩn (https. //đám mây. Google. com/sql/docs/postgres/tạo cá thể)
  2. Kết nối với cơ sở dữ liệu tận dụng Google Cloud SDK hoặc ứng dụng khách cơ sở dữ liệu
  3. Sau khi kết nối với cơ sở dữ liệu, hãy tiếp tục với các câu lệnh SQL bên dưới
  • Bật tiện ích mở rộng pgcrypto trên phiên bản PostgreSQL

TẠO PHẦN MỞ RỘNG NẾU KHÔNG TỒN TẠI pgcrypto;

  • Tạo ví dụ bảng “nhân viên” để lưu trữ tên và vai trò của nhân viên trong công ty

tạo bảng nhân viên (văn bản tên, văn bản vai trò);

  • Trong trường hợp này, tên trường được coi là dữ liệu nhạy cảm và phải được mã hóa bằng cách sử dụng chức năng PGP_SYM_ENCRYPT chấp nhận giá trị của trường và khóa mã hóa 'AES_KEY' làm tham số đầu vào. Vai trò của trường không nhạy cảm và có thể được lưu trữ dưới dạng văn bản thuần túy. Câu lệnh chèn sau đây chèn một bản ghi có tên được mã hóa và vai trò là văn bản thuần túy

CHÈN VÀO nhân viên (tên, vai trò) GIÁ TRỊ (
PGP_SYM_ENCRYPT(‘Alessandro’,’AES_KEY’),
‘Kỹ sư khách hàng của Google Cloud’);

  • Để kiểm tra xem câu lệnh chèn đó có hoạt động như mong đợi hay không, có thể thực thi một câu lệnh CHỌN đơn giản sẽ trả về giá trị được mã hóa cho tên trường và văn bản thuần túy cho vai trò của trường

chọn tên, vai trò từ nhân viên;

đầu ra

  • Để truy xuất trường được mã hóa, cần sử dụng hàm PGP_SYM_DECRYPT có thể được sử dụng cả trong câu lệnh SELECT và mệnh đề WHERE. Để cho phép giải mã, tên trường cũng được chuyển sang kiểu dữ liệu nhị phân với cú pháp. Tên. tạm biệt

CHỌN PGP_SYM_DECRYPT(tên. bytea, ‘AES_KEY’) như tên, vai trò
TỪ nhân viên
Ở ĐÂU
PGP_SYM_DECRYPT(tên. bytea, ‘AES_KEY’)=’Alessandro’;

đầu ra

Mã hóa bất đối xứng PostgreSQL

  1. Tạo phiên bản Google CloudSQL PostgreSQL theo tài liệu chuẩn (https. //đám mây. Google. com/sql/docs/postgres/tạo cá thể)
  2. Trước khi kết nối với cơ sở dữ liệu, hãy thực hiện các lệnh sau trên HĐH Linux để tạo khóa Công khai và Khóa riêng
  • Tạo một vài khóa (Công khai và Riêng tư). Trong quá trình này, các tham số sau đây được hỏi. tên của bạn, địa chỉ email của bạn và mật khẩu (cũng có thể để trống). Mã thập lục phân được đánh dấu bên dưới xác định cặp khóa (riêng tư và công khai) được tạo
    Hãy ghi nhớ mật khẩu đã chọn (YOUR_PASSWORD) vì nó sẽ được sử dụng để giải mã dữ liệu bằng khóa riêng

gpg — khóa gen

đầu ra

quán rượu rsa3072 2020–03–13 [SC] [hết hạn. 2022–03–13]

F5332A4839D400B8D5A140A90CCD14F82A11E415

F5332A4839D400B8D5A140A90CCD14F82A11E415

uid your_username

sub rsa3072 2020–03–13 [E] [expires. 2022–03–13]

  • Xuất khóa riêng vào tệp mới private_key. txt với — tùy chọn áo giáp để lấy định dạng văn bản

gpg — xuất-khóa-bí-mật — áo giáp F5332A4839D400B8D5A140A90CCD14F82A11E415 >. / private_key. txt

  • Xuất khóa công khai thành tệp mới public_key. txt với — tùy chọn áo giáp để lấy định dạng văn bản

gpg — xuất khẩu — áo giáp F5332A4839D400B8D5A140A90CCD14F82A11E415 >. /khóa công khai. txt

3. Giờ đây, một vài khóa (riêng tư và công khai) đã được tạo, có thể kết nối với cơ sở dữ liệu bằng Google Cloud SDK hoặc ứng dụng khách cơ sở dữ liệu

4. Sau khi kết nối với cơ sở dữ liệu, hãy tiếp tục với các câu lệnh SQL bên dưới

  • Bật tiện ích mở rộng pgcrypto trên phiên bản PostgreSQL

TẠO PHẦN MỞ RỘNG NẾU KHÔNG TỒN TẠI pgcrypto;

  • Tạo ví dụ bảng “employee_asymmetric” để lưu tên và vai trò của nhân viên trong công ty

tạo bảng employee_asymmetric (văn bản tên, văn bản vai trò);

  • Trong trường hợp này, tên trường được coi là dữ liệu nhạy cảm và phải được mã hóa bằng cách sử dụng hàm pgp_pub_encrypt chấp nhận giá trị của trường và khóa mã hóa Công khai được tạo trong các bước trước làm tham số đầu vào và có sẵn trong tệp “public_key. txt”. Vai trò của trường không nhạy cảm và có thể được lưu trữ dưới dạng văn bản thuần túy. Câu lệnh chèn sau đây chèn một bản ghi có tên được mã hóa và vai trò là văn bản thuần túy. Chức năng Dearmor là cần thiết để chuyển đổi khóa công khai sang định dạng nhị phân từ định dạng văn bản

CHÈN VÀO NHÂN VIÊN_asymmetric (tên, vai trò) GIÁ TRỊ (pgp_pub_encrypt(‘Alessandro’, Dearmor(‘ — — -BEGIN KHỐI KHÓA CÔNG CỘNG PGP — — -KHÓA CÔNG CỘNG DÀI CỦA BẠN — — - KẾT THÚC KHỐI KHÓA CÔNG CỘNG PGP — — -')),
‘Kỹ sư khách hàng của Google Cloud’ );

  • Để kiểm tra xem câu lệnh chèn đó có hoạt động như mong đợi hay không, có thể thực thi một câu lệnh CHỌN đơn giản sẽ trả về giá trị được mã hóa cho tên trường và văn bản thuần túy cho vai trò của trường

chọn tên, vai trò từ employee_asymmetric;

đầu ra

  • Để truy xuất trường được mã hóa, cần sử dụng hàm pgp_pub_decrypt có thể được sử dụng cả trong câu lệnh SELECT và trong mệnh đề WHERE. Để cho phép giải mã, tên trường cũng được chuyển sang kiểu dữ liệu nhị phân với cú pháp. Tên. tạm biệt. Chức năng Dearmor là cần thiết để chuyển đổi khóa công khai sang định dạng nhị phân từ định dạng văn bản

CHỌN pgp_pub_decrypt(tên. bytea, Dearmor(‘ — — -BEGIN KHỐI KHÓA RIÊNG TƯ PGP — — -KHÓA RIÊNG TƯ DÀI CỦA BẠN — — -END KHỐI KHÓA RIÊNG TƯ PGP — — -’)‘pgcrypto’) như tên,
Vai diễn
TỪ employee_asymmetric
Ở ĐÂU
role='Kỹ sư khách hàng của Google Cloud'
VÀ pgp_pub_decrypt(tên. bytea, Dearmor(‘ — — -BEGIN KHỐI KHÓA RIÊNG TƯ PGP — — -KHÓA RIÊNG TƯ DÀI CỦA BẠN — — -END KHỐI KHÓA RIÊNG TƯ PGP — — -'),'YOUR_PASSWORD')='Alessandro';

đầu ra

mysql 5. 7

A ví dụ tương tự được trình bày cho MySQL. Để có tài liệu mã hóa đầy đủ trên MySQL, vui lòng tham khảo https. // nhà phát triển. mysql. com/doc/refman/8. 0/vi/hàm mã hóa. html.

Do giới hạn giấy phép (yêu cầu MySQL Enterprise), ví dụ bên dưới chỉ tập trung vào mã hóa đối xứng

Mã hóa đối xứng MySQL

  1. Tạo phiên bản Google CloudSQL MySQL theo tài liệu chuẩn (https. //đám mây. Google. com/sql/docs/mysql/tạo cá thể)
  2. Kết nối với cơ sở dữ liệu tận dụng Google Cloud SDK hoặc ứng dụng khách cơ sở dữ liệu
  3. Sau khi kết nối với cơ sở dữ liệu, hãy tiếp tục với các câu lệnh SQL bên dưới
  • Tạo cơ sở dữ liệu để lưu trữ bản demo/thử nghiệm này

tạo mã hóa cơ sở dữ liệu_test;

  • Bắt đầu sử dụng cơ sở dữ liệu mới được tạo ở bước trước

sử dụng mã hóa_test;

  • Tạo bảng để lưu trữ trường được mã hóa (tên) và trường khác (vai trò). Không giống như trên PostgreSQL, đối với các trường được mã hóa, cần sử dụng định dạng nhị phân vì hàm mã hóa trả về một tệp nhị phân

tạo bảng employee ( name varbinary(200), role varchar(200));

  • Trong trường hợp này, tên trường được coi là dữ liệu nhạy cảm và phải được mã hóa bằng cách sử dụng hàm AES_ENCRYPT chấp nhận giá trị của trường và khóa mã hóa làm tham số đầu vào. Vai trò của trường không nhạy cảm và có thể được lưu trữ dưới dạng văn bản thuần túy. Câu lệnh chèn sau đây chèn một bản ghi có tên được mã hóa và vai trò là văn bản thuần túy

CHÈN vào các GIÁ TRỊ (tên, vai trò) của nhân viên (AES_ENCRYPT(‘Alessandro’, ‘key’), ‘Kỹ sư khách hàng của Google Cloud’);

  • Để kiểm tra xem câu lệnh chèn đó có hoạt động như mong đợi hay không, có thể thực thi một câu lệnh CHỌN đơn giản sẽ trả về giá trị được mã hóa cho tên trường và văn bản thuần túy cho vai trò của trường

chọn * từ nhân viên;

  • Để truy xuất trường được mã hóa, cần sử dụng hàm AES_DECRYPT có thể được sử dụng cả trong câu lệnh SELECT và mệnh đề WHERE

CHỌN AES_DECRYPT(tên, ‘key’) làm tên, vai trò TỪ nhân viên WHERE AES_DECRYPT(name, ‘key’)=’Alessandro’;

kết luận

G oogle CloudSQL cho phép người dùng quản lý mã hóa cấp trường (hoặc cột) trong PostgreSQL và MySQL, tăng cường hơn nữa ngăn xếp bảo mật do GCP cung cấp.
Người dùng hoặc ứng dụng cần tận dụng mã hóa cấp trường nên

  • điều chỉnh cú pháp SQL để sử dụng các chức năng mã hóa/giải mã
  • biết và sử dụng khóa để mã hóa và giải mã các trường được bảo vệ

Giống như tất cả các kỹ thuật, mã hóa cấp trường (hoặc cột) đều có ưu và nhược điểm của nó. Chúng được tóm tắt dưới đây

Làm cách nào để mã hóa dữ liệu 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'; .

MySQL có mã hóa không?

MySQL hỗ trợ các kết nối được mã hóa giữa máy khách và máy chủ bằng giao thức TLS (Bảo mật tầng truyền tải) . TLS đôi khi được gọi là SSL (Lớp cổng bảo mật) nhưng MySQL không thực sự sử dụng giao thức SSL cho các kết nối được mã hóa vì mã hóa của nó yếu (xem Phần 6. 3.

Làm cách nào để giải mã giá trị cột 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 để mã hóa trường mật khẩu trong MySQL?

Máy chủ MySQL sử dụng chức năng MẬT KHẨU để mã hóa mật khẩu MySQL để lưu trữ trong cột Mật khẩu của bảng cấp người dùng. Giá trị do hàm MẬT KHẨU trả về là một chuỗi được băm hoặc NULL nếu đối số là NULL. Hàm MẬT KHẨU nhận một tham số là chuỗi cần mã hóa.