Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Hiểu máy chủ SQL luôn được mã hóa

Bảo mật là một trong những yêu cầu quan trọng nhất đối với hệ thống hướng dữ liệu. Mã hóa là một trong những cách để bảo mật dữ liệu. Wikipedia định nghĩa mã hóa là:

Mã hóa là quá trình mã hóa thông báo hoặc thông tin theo cách mà chỉ các bên được ủy quyền mới có thể truy cập và những người không được ủy quyền không thể truy cập.

Trong SQL Server 2016, Microsoft đã giới thiệu một tính năng mã hóa có tên là Luôn được mã hóa . Trong bài viết này, chúng ta sẽ xem những gì Luôn được mã hóa là gì và nó có thể được sử dụng như thế nào để mã hóa và giải mã dữ liệu, với sự trợ giúp của các ví dụ đơn giản.

SQL Server Luôn được Mã hóa là gì?

Luôn được mã hóa là một tính năng bảo mật cho phép ứng dụng khách quản lý các khóa mã hóa và giải mã, do đó đảm bảo rằng chỉ ứng dụng khách mới có thể giải mã và sử dụng dữ liệu nhạy cảm.

Có một số kỹ thuật mã hóa, tuy nhiên chúng không an toàn như Luôn được mã hóa . Ví dụ, mã hóa khóa đối xứng được sử dụng để mã hóa dữ liệu ở phía cơ sở dữ liệu. Một hạn chế của phương pháp này là nếu bất kỳ quản trị viên cơ sở dữ liệu nào khác có khóa giải mã, thì người đó có thể truy cập vào dữ liệu.

Mặt khác, trong trường hợp Luôn được mã hóa , dữ liệu được mã hóa ở phía máy khách và máy chủ cơ sở dữ liệu nhận được phiên bản mật mã của dữ liệu. Do đó, dữ liệu không thể được giải mã ở cuối cơ sở dữ liệu. Chỉ ứng dụng khách đã mã hóa dữ liệu mới có thể giải mã nó.

Loại khóa

Tính năng luôn được mã hóa của SQL Server sử dụng hai loại khóa:

  • Khóa mã hóa cột (CEK)

Nó luôn được đặt trên máy chủ cơ sở dữ liệu. Dữ liệu thực sự được mã hóa bằng cột CEK. Tuy nhiên, nếu ai đó ở phía cơ sở dữ liệu có quyền truy cập vào CEK, anh ta có thể giải mã dữ liệu.

  • Khóa Chính của Cột (CMK)

Khóa này được đặt ở phía máy khách hoặc bất kỳ bộ nhớ nào của bên thứ ba. CMK được sử dụng để bảo vệ CEK, thêm một lớp bảo mật bổ sung. Bất kỳ ai có quyền truy cập vào CMK thực sự có thể giải mã CEK, sau đó có thể được sử dụng để giải mã dữ liệu thực tế.

Các loại mã hóa

  • Xác định

Loại mã hóa này sẽ luôn tạo ra văn bản được mã hóa tương tự cho cùng một loại dữ liệu. Nếu bạn muốn triển khai tìm kiếm và nhóm trên một cột trong bảng, hãy sử dụng mã hóa xác định cho cột đó.

  • Ngẫu nhiên

Mã hóa Ngẫu nhiên sẽ tạo ra các văn bản được mã hóa khác nhau cho cùng một loại dữ liệu, bất cứ khi nào bạn cố gắng mã hóa dữ liệu. Sử dụng mã hóa ngẫu nhiên nếu cột không được sử dụng để nhóm và tìm kiếm.

Đang định cấu hình Luôn được mã hóa Sử dụng SSMS

Chúng tôi có thể cấu hình SQL Server Luôn được Mã hóa qua SSMS. Nhưng trước đó, chúng ta cần tạo một cơ sở dữ liệu và thêm một bảng vào cơ sở dữ liệu. Thực thi tập lệnh sau để làm như vậy:

CREATE DATABASE School

Use School
CREATE TABLE Student  
(  
   StudentId int identity(1,1) primary key,  
   Name varchar(100),  
   Password varchar(100) COLLATE Latin1_General_BIN2 not null,  
   SSN varchar(20)  COLLATE Latin1_General_BIN2 not null
)

Trong tập lệnh ở trên, chúng tôi tạo một cơ sở dữ liệu mới có tên là Trường học . Cơ sở dữ liệu có bốn cột: StudentId , Tên , Mật khẩu SSN . Bạn có thể thấy rằng các cột Mật khẩu và SSN có một CỘT. Cần phải chỉ định COLLATE cho cột mà bạn muốn Luôn được mã hóa . Loại mã hóa được chỉ định là “Latin1_General_BIN2”.

Bây giờ, trước tiên hãy thử thêm hai bản ghi vào bảng Sinh viên.

insert into Student ( Name, Password, SSN)
VALUES ('John','abc123', '451236521478'),
('Mike','xyz123', '789541239654')

Tại thời điểm này, chúng tôi chưa định cấu hình Luôn được mã hóa trên bất kỳ cột nào trong bảng Sinh viên, do đó nếu bạn cố gắng chọn các bản ghi từ bảng Sinh viên, bạn sẽ thấy các giá trị dữ liệu thực tế hơn là các giá trị được mã hóa. Thực hiện truy vấn sau để chọn bản ghi:

SELECT * FROM Student

Đầu ra giống như sau:

Bây giờ chúng ta hãy định cấu hình SSMS để bật Luôn được mã hóa . Như chúng tôi đã nói trước đó, Luôn được mã hóa tạo khóa mã hóa cột và khóa chính của cột.

Để xem các khóa mã hóa cột và khóa chính cột hiện có, đối với Cơ sở dữ liệu trường học, hãy chuyển đến Cơ sở dữ liệu -> Trường học -> Bảo mật -> Khóa luôn được mã hóa như trong hình sau:

Vì bạn không có bất kỳ bản ghi được mã hóa nào trong tập dữ liệu, nên bạn sẽ không thấy bất kỳ CEK hoặc CMK nào trong danh sách.

Bây giờ chúng ta hãy bật mã hóa trên các cột Mật khẩu và SSN của bảng Sinh viên. Để làm như vậy, Nhấp chuột phải vào Cơ sở dữ liệu -> Trường học. Từ trình đơn thả xuống, hãy chọn Mã hóa các cột như thể hiện trong hình bên dưới:

Nhấp vào Tiếp theo trên nút Giới thiệu cửa sổ. Từ Lựa chọn cột cửa sổ, kiểm tra Mật khẩu và cột SSN. Đối với cột Mật khẩu, hãy chọn kiểu mã hóa là Ngẫu nhiên hóa . Đối với cột SSN, hãy chọn Xác định . Điều này được hiển thị trong ảnh chụp màn hình sau:

Nhấp vào Tiếp theo trên Cấu hình khóa chính cửa sổ. Theo mặc định, khóa chính được lưu trữ trên máy khách như hình dưới đây:

Nhấp vào Tiếp theo trên nút Chạy cài đặt và phần Tóm tắt các cửa sổ. Nếu mọi thứ suôn sẻ, bạn sẽ thấy Kết quả sau cửa sổ.

Bây giờ nếu bạn truy cập lại Cơ sở dữ liệu -> Trường học -> Bảo mật -> Khóa luôn được mã hóa, bạn sẽ thấy CEK và CMK mới được tạo như thể hiện trong hình sau:

Bây giờ hãy thử chọn các bản ghi từ bảng Sinh viên.

SELECT * FROM Student

Đầu ra trông như thế này.

Từ đầu ra, bạn có thể thấy rằng các cột Mật khẩu và SSN đã được mã hóa.

Truy xuất dữ liệu đã giải mã

Truy vấn SELECT trả về dữ liệu được mã hóa. Nếu bạn muốn lấy dữ liệu ở dạng đã giải mã thì sao? Để làm như vậy, hãy tạo một Cửa sổ truy vấn mới trong SSMS và sau đó nhấp vào liên kết Thay đổi kết nối ở đầu Object Explorer như được hiển thị trong hình sau:

Cửa sổ kết nối SQL Server sẽ xuất hiện. Chọn Tùy chọn từ dưới cùng bên phải như hình dưới đây:

Từ cửa sổ xuất hiện, nhấp vào Tham số kết nối bổ sung từ trên cùng bên trái và nhập “Cài đặt mã hóa cột =Đã bật” vào hộp văn bản như được hiển thị trong ảnh chụp màn hình sau. Cuối cùng, nhấp vào nút Kết nối nút.

Bây giờ một lần nữa thực hiện truy vấn SELECT sau:

SELECT * FROM Student

Trong kết quả, bạn sẽ thấy các bản ghi được trả về ở dạng giải mã như hình dưới đây:

Kết luận

Luôn luôn E n được mã hóa là một trong những tính năng bảo mật mới nhất của SQL Server. Trong bài viết này, chúng tôi đã xem xét ngắn gọn những gì Luôn luôn E n được mã hóa là gì và làm thế nào để kích hoạt nó bằng cách sử dụng SQL Server Management Studio. Chúng tôi cũng đã thấy một ví dụ cơ bản về mã hóa và giải mã dữ liệu bằng cách sử dụng Luôn luôn E n được mã hóa tính năng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tổng quan về câu lệnh PRINT trong SQL Server

  2. Làm cách nào để truy xuất dữ liệu từ cơ sở dữ liệu SQL Server trong C #?

  3. ExecuteScalar so với ExecuteNonQuery khi trả về giá trị nhận dạng

  4. Làm cách nào để tạo khóa chính làm AUTOINCREMENT

  5. Cách tìm tất cả các đồ thị con được kết nối của một đồ thị vô hướng