Các Loại Mã Hóa Cơ Sở Dữ Liệu Trong SQL Server
SQL Server cung cấp nhiều tùy chọn mã hóa nhằm bảo vệ dữ liệu nhạy cảm. Dưới đây là các loại mã hóa cơ sở dữ liệu chính trong SQL Server:
1. Mã Hóa Dữ Liệu Minh Bạch (TDE)
Mã Hóa Dữ Liệu Minh Bạch (TDE) là một tính năng ra mắt trong SQL Server 2008, cho phép mã hóa toàn bộ cơ sở dữ liệu ở cấp độ tập tin. Nó bảo vệ dữ liệu khi nghỉ, bao gồm các tệp dữ liệu và nhật ký, mà không yêu cầu thay đổi ứng dụng. TDE sử dụng khóa mã hóa cơ sở dữ liệu (DEK) để mã hóa các tệp dữ liệu và một chứng chỉ máy chủ hoặc khóa bất đối xứng để bảo vệ DEK.
Cách Kích Hoạt TDE:
- Tạo khóa chính của cơ sở dữ liệu và một chứng chỉ được bảo vệ bằng khóa chính đó.
- Tạo khóa mã hóa cơ sở dữ liệu (DEK) được bảo vệ bằng chứng chỉ.
- Thiết lập cơ sở dữ liệu để sử dụng mã hóa.
sql
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'strong_password';
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My Database Encryption Key Certificate';
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
ALTER DATABASE MyDatabase
SET ENCRYPTION ON;
2. Mã Hóa Luôn Luôn (Always Encrypted)
Mã Hóa Luôn Luôn là một tính năng mới trong SQL Server 2016, cho phép các ứng dụng khách mã hóa dữ liệu nhạy cảm mà không bao giờ tiết lộ các khóa mã hóa cho SQL Server. Tính năng này bảo vệ dữ liệu khi nghỉ và khi di chuyển. Mã Hóa Luôn Luôn hỗ trợ chế độ mã hóa xác định và ngẫu nhiên.
Cách Sử Dụng Mã Hóa Luôn Luôn:
- Cấu hình ứng dụng để sử dụng Mã Hóa Luôn Luôn.
- Tạo các cột mã hóa trong cơ sở dữ liệu.
- Sử dụng các đối tượng SqlParameter để truyền dữ liệu đã mã hóa đến SQL Server.
csharp
string connString = "Server=database.example.com;Database=Clinic;Column Encryption Setting=enabled";
using (SqlConnection conn = new SqlConnection(connString)) {
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT FirstName, LastName, BirthDate FROM Patients WHERE SSN = @SSN";
SqlParameter paramSSN = cmd.CreateParameter();
paramSSN.ParameterName = "@SSN";
paramSSN.Value = "795-73-9838";
cmd.Parameters.Add(paramSSN);
using (SqlDataReader reader = cmd.ExecuteReader()) {
while (reader.Read()) {
Console.WriteLine("{0}, {1}, {2}", reader[0], reader[1], ((DateTime)reader[2]).ToShortDateString());
}
}
}
3. Mã Hóa Cột Cấp Độ (Column-level Encryption)
Mã Hóa Cột Cấp Độ cho phép bạn mã hóa các cột riêng lẻ trong bảng bằng cách sử dụng các khóa đối xứng. Tính năng này cung cấp cấp độ chi tiết cao hơn so với TDE. Mã Hóa Cột Cấp Độ sử dụng các hàm EncryptByKey và DecryptByKey.
Cách Mã Hóa Cột:
- Tạo khóa chính của cơ sở dữ liệu và một khóa đối xứng.
- Mở khóa đối xứng.
- Mã hóa dữ liệu trong cột bằng EncryptByKey.
- Đóng khóa đối xứng.
sql
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'strong_password';
CREATE SYMMETRIC KEY SymKey_test WITH ALGORITHM = AES_256 ENCRYPTION BY MASTER KEY;
OPEN SYMMETRIC KEY SymKey_test DECRYPTION BY MASTER KEY;
UPDATE CustomerData.dbo.CustomerInfo
SET BankACCNumber_encrypt = EncryptByKey(Key_GUID('SymKey_test'), BankACCNumber);
CLOSE SYMMETRIC KEY SymKey_test;
Kết Luận
Tóm lại, SQL Server cung cấp nhiều tùy chọn mã hóa để bảo vệ dữ liệu nhạy cảm ở các mức độ khác nhau - từ việc mã hóa toàn bộ cơ sở dữ liệu cho đến việc mã hóa các cột riêng lẻ. Lựa chọn nào phù hợp sẽ phụ thuộc vào các yêu cầu bảo mật cụ thể và các yếu tố hiệu suất.
Tài Liệu Tham Khảo
source: viblo