Tôi đang tìm mẫu tốt để triển khai các điều khiển bảo mật mức hàng (thông qua dịch vụ web, dịch vụ web trung gian hoặc thủ tục được lưu trữ) phù hợp để sử dụng trong môi trường cơ sở dữ liệu khách hàng->. Tôi kiểm soát cả khách hàng và cơ sở dữ liệu. Một số yêu cầu:Bảo mật mức hàng trong kịch bản cơ sở dữ liệu khách hàng
- Cấm người dùng nhìn thấy hàng trong kết quả truy vấn mà họ không có quyền để xem
- Cho phép người dùng để chèn và cập nhật hàng của mình vào bảng, mang đến cho phép nhìn thấy chúng họ
- (yêu cầu mềm) cho phép người dùng cấp cho người khác quyền truy cập để đọc hoặc viết hàng của họ
- Giải pháp nguồn mở hoặc chi phí thấp chạy trên Linux. Như tôi đã hiểu, không có cơ sở dữ liệu miễn phí nào thực hiện bảo mật mức hàng như vậy. Oracle hỗ trợ điều này nhưng nó cũng là quá. Postgres might be implementing this in 9.4, nhưng nó ban đầu được nhắm mục tiêu cho 9.3 và trượt và có thảo luận về ML rằng nó có thể trượt một lần nữa. Tôi đang nghĩ về việc sử dụng postgres chỉ vì họ có vẻ xa nhất trên tính năng này.
Một số (không tốt lắm) ý tưởng tôi đã có:
- xem hàng rào an ninh Sử dụng postgresql và từ chối người dùng truy cập vào bảng bên dưới. Thật không may là có no good way to insert a row into a security barrier view, vì vậy một số proxy/webservice đặc quyền sẽ phải xử lý các câu lệnh chèn. Điều này có vẻ khó khăn để có được quyền.
- Sử dụng chế độ xem thông thường và từ chối quyền truy cập của người dùng vào bảng bên dưới. Điều này cho phép
insert
, nhưng tôi sẽ cần phải khóa các quyền khá chặt chẽ (ví dụ: không có chức năng tạo) và there seem to be a lot of gotchas (like divide by zero) that leak information. - Xác định một số tập con của SQL và tạo proxy là điểm giao tiếp duy nhất của bạn với cơ sở dữ liệu. Proxy phân tích truy vấn SQL của bạn và viết lại nó để thực thi các yêu cầu bảo mật. Điều này có vẻ khó làm nói chung, nhưng có lẽ tôi có thể lấy đi với một tập con SQL rất nhỏ cho đến khi postgres thực hiện bảo mật mức hàng cho thực.
- Chỉ có các bảng khác nhau cho những người dùng khác nhau (hoặc thậm chí là các DB khác nhau). Tuy nhiên, tôi không chắc chắn điều này có quy mô như thế nào đối với nhiều người dùng. Ngoài ra, điều này dường như không đáp ứng yêu cầu mềm.
- Tìm một số DB thương mại nhưng hợp lý chi phí mà thực sự hỗ trợ này
- Sử dụng Veil nhưng nó dường như không được duy trì, và nó có hầu hết các hạn chế của các giải pháp khác
Tôi đã làm một rất nhiều googling về chủ đề này nhưng tôi vẫn chưa thấy một postmortem về cách một người nào đó giải quyết vấn đề này trong một kịch bản thế giới thực. Có some documentation for MS SQL nhưng dường như là discouraged in MySQL và ghi lại về cơ bản là không tồn tại cho postgres. Điều này có vẻ như là một vấn đề rất phổ biến, nhưng tôi đoán nhiều người đang viết các ứng dụng web và nội dung để còng tay người dùng của họ vào một số truy vấn đã được kiểm tra trước, nhưng tôi thực sự cần cung cấp cho người dùng nhiều sự linh hoạt nhất có thể truy vấn dữ liệu với khách hàng của tôi.
Vâng, bảo mật hàng cho PostgreSQL đã trượt xuống còn 9.4. Bản vá hiện tại khá tốt, nhưng tôi vẫn phải sửa ít nhất một lỗi liên quan đến các khung nhìn bảo mật trong codebase hiện tại, sửa các bài kiểm tra hồi quy, và thực hiện một số dọn dẹp chung để làm cho nó có khả năng. Đã quá muộn với 9.4. –
Sẽ rất hữu ích nếu bạn đặt một từ tốt cho việc bao gồm các chế độ xem bảo mật có thể cập nhật tự động trong 9.4. Người dùng nhấn vào tính năng đó có thể là sự khác biệt giữa việc đưa vào và thiếu thời hạn. –
http://www.postgresql.org/docs/devel/static/ddl-rowsecurity.html – kzh