Tôi đã cố gắng và không tìm ra cách tiếp cận tốt để mã hóa dữ liệu SQL với Mã khung thực thể đầu tiên. Tôi phải bắt đầu với điều này tôi đang lưu trữ trong Azure và không có quyền truy cập vào mã hóa SQL bản địa.Làm cách nào để mã hóa dữ liệu trong Mã khung thực thể đầu tiên?
Lấy một trang từ SecurEntity, tôi đã thực hiện đầy đủ một cách tiếp cận sử dụng SaveChanges và ObjectMaterialized để xử lý mã hóa/giải mã của các đối tượng, nhưng trong thử nghiệm tôi đã tìm thấy này đã được xa quá không đáng tin cậy để sử dụng.
Đây là một mẫu của một số tình hình thực hiện:
public override int SaveChanges()
{
var pendingEntities = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager
.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
.Where(en => !en.IsRelationship).ToList();
foreach (var entry in pendingEntities) //Encrypt all pending changes
EncryptEntity(entry.Entity);
int result = base.SaveChanges();
foreach (var entry in pendingEntities) //Decrypt updated entities for continued use
DecryptEntity(entry.Entity);
return result;
}
void ObjectMaterialized(object sender, ObjectMaterializedEventArgs e)
{
DecryptEntity(e.Entity);
}
Tôi đã nhìn thấy bài viết khác mà tự mã hóa/giải mã thông qua thuộc tính thứ cấp, như vậy:
public Value { get; set; }
[NotMapped]
public DecryptedValue
{
get { return Decrypt(this.Value); }
set { this.Value = Encrypt(value); }
}
này sẽ chắc chắn nhất công việc, nhưng tôi thấy cách tiếp cận này là ... ít hơn lý tưởng. Khi sử dụng phương pháp này, tất cả các nhà phát triển phải lội qua tất cả các thuộc tính được mã hóa để tìm ra những thuộc tính nào họ có thể sử dụng.
Giải pháp lý tưởng nhất sẽ là để tôi có thể ghi đè việc nhận/cài đặt của từng giá trị ở cấp truy cập dữ liệu. Có cách nào để làm việc này không? Nếu không, làm thế nào tôi có thể thực hiện mã hóa dữ liệu với Entity Framework - Mã đầu tiên để nó sẽ dễ dàng để duy trì và làm việc với?
Lưu ý rằng việc triển khai SecurEntity hiện tại có lỗ hổng bảo mật nghiêm trọng, có nghĩa là khóa được tạo ra từ chứng chỉ thực sự không bao giờ được sử dụng. Để khắc phục nhanh chóng và bẩn, hãy xem https://securentity.codeplex.com/workitem/7376 –