2008-08-29 27 views
6

Hệ thống mà tôi hiện đang làm việc đòi hỏi một số bảo mật dựa trên vai trò, được bảo đảm tốt trong ngăn xếp Java EE. Hệ thống này dự định trở thành một khuôn khổ cho các chuyên gia trong lĩnh vực kinh doanh để viết mã của họ lên trên.'bảo mật' dữ liệu với java và hibernate

Tuy nhiên, cũng có yêu cầu đối với dữ liệu security. Tức là, thông tin nào hiển thị cho người dùng cuối.

Điều này có nghĩa là giảm khả năng hiển thị thành các hàng (và thậm chí cả các cột) trong cơ sở dữ liệu.

Chúng tôi đang sử dụng Hibernate cho sự kiên trì của mình. Tuy nhiên, chúng tôi đang sử dụng chú thích của riêng mình để không phơi bày lựa chọn kiên trì của chúng tôi cho các chuyên gia trong lĩnh vực kinh doanh.

Để bảo mật dựa trên hàng hóa, điều này có nghĩa là chúng tôi có thể thêm chú thích như @Secured ở cấp tổ chức, điều này sẽ khiến cột bổ sung được thêm vào bảng bên dưới để hạn chế lựa chọn của chúng tôi?

Để bảo mật dựa trên cột, có lẽ chúng tôi có thể có @Secured để hỗ trợ trong tạo truy vấn hoặc có thể sử dụng khía cạnh để lọc thông tin được trả về?

Tôi tò mò muốn biết điều này có thể ảnh hưởng đến các cơ chế lưu trong bộ nhớ đệm của hibernate như thế nào?

Tôi chắc chắn rất nhiều người khác sẽ gặp vấn đề tương tự, và tôi đã tự hỏi làm cách nào bạn tiếp cận vấn đề này?

nhiều đánh giá cao ...

Trả lời

6

Hibernate có filter mechanism có thể làm việc cho bạn. Các bộ lọc sẽ viết lại các truy vấn hibernate tạo ra để bao gồm một mệnh đề bổ sung để giới hạn các hàng được trả về. Tôi không nhận thức được bất cứ điều gì trong hibernate để che giấu/ẩn cột.

Cơ sở dữ liệu của bạn cũng có thể hỗ trợ chức năng này. Oracle, ví dụ, có Virtual Private Database (VPD) sẽ viết lại các truy vấn của bạn ở cấp cơ sở dữ liệu. Giải pháp này có lợi ích bổ sung mà bất kỳ chương trình bên ngoài nào (ví dụ: các công cụ báo cáo) đi ngược lại db của bạn sẽ có các hạn chế bảo mật của bạn được thực thi. VPD cũng có hỗ trợ để che dấu các cột bị hạn chế bằng NULL.

Thật không may, các giải pháp trên chưa đủ để hỗ trợ các yêu cầu bảo mật cho các dự án loại mà tôi thường làm việc. Thường có một số loại ngữ cảnh không thể dễ dàng diễn tả trong các giải pháp trên. Ví dụ: người dùng có thể xem dữ liệu mà họ đã tạo hoặc đã được đánh dấu là công khai hoặc thuộc về dự án mà họ quản lý.

Chúng tôi thường tạo các đối tượng truy vấn/tìm/DAO nơi chúng tôi chuyển các giá trị cần thiết để thực thi bảo mật và sau đó tạo truy vấn cho phù hợp.

Tôi hy vọng điều này sẽ giúp

1

Khi sử dụng Hibernate bộ lọc mà bạn cần phải lưu ý rằng các hạn chế bổ sung sẽ không được áp dụng cho câu lệnh SQL generted bởi load() hoặc get() phương pháp.

Các vấn đề liên quan