2015-11-22 24 views
5

Tôi cần kiểm soát chặt chẽ việc đọc và ghi dữ liệu Postgres của mình. Chế độ xem có thể cập nhật luôn cung cấp khả năng đọc, kiểm soát dữ liệu của tôi rất tốt, nghiêm ngặt và cho phép tôi thêm các cột được tính có giá trị. Với Postgres 9.5, bảo mật mức hàng đã giới thiệu một cách mới và mạnh mẽ để kiểm soát dữ liệu của tôi. Nhưng tôi không thể sử dụng cả hai chế độ xem công nghệ và bảo mật mức hàng với nhau. Tại sao?Tại sao tính năng bảo mật cấp hàng không được bật cho chế độ xem Postgres?

+1

nếu bạn bật bảo mật cấp hàng trên bảng và sau đó sử dụng chế độ xem có thể cập nhật trên bảng, bảo mật có hoạt động không? – mehmet

+1

Không vì truy vấn đi qua vai trò được xác định xem, không phải vai trò hiện tại. – Calebmer

+0

Sau đó, cách thiết lập bảo mật mức hàng trên vai trò được xác định xem? – mehmet

Trả lời

6

Về cơ bản vì không thể thay đổi về cách hoạt động của chế độ xem. Tôi muốn có thể hỗ trợ SECURITY INVOKER (hoặc tương đương) cho các chế độ xem nhưng theo như tôi biết không có tính năng như vậy hiện có.

Bạn có thể lọc quyền truy cập vào chế độ xem tự chụp với bảo mật hàng bình thường.

Các bảng được truy cập theo chế độ xem cũng sẽ áp dụng các quy tắc bảo mật hàng. Tuy nhiên, họ sẽ thấy current_user là người sáng tạo chế độ xem vì các bảng truy cập chế độ xem (và các chế độ xem khác) với các quyền của người dùng đã tạo/sở hữu chế độ xem.

Có lẽ nó sẽ có giá trị nâng cao này trên pgsql-tin tặc nếu bạn sẵn sàng bước vào và giúp đỡ với sự phát triển của các tính năng bạn cần, hoặc pgsql chung nói cách khác?

Điều đó nói rằng, trong khi lượt xem truy cập bảng dưới dạng người dùng tạo và thay đổi current_user tương ứng, chúng không ngăn bạn sử dụng GUC tùy chỉnh, session_user hoặc thông tin theo ngữ cảnh khác trong chính sách bảo mật hàng. Bạn có thể sử dụng bảo mật hàng với chế độ xem, chỉ cần không (hữu ích) để lọc dựa trên current_user.

+0

Làm cách nào để thay đổi cách hoạt động của chế độ xem? Không phải RLS về cơ bản chỉ là bổ sung một số mệnh đề 'WHERE'? Và không phải là một cái nhìn về cơ bản chỉ là một câu lệnh SQL? – Calebmer

+1

@Calebmer Xem các bảng truy cập được sử dụng bởi chế độ xem với quyền truy cập của người dùng đã tạo chế độ xem. Để cho phép bảo mật hàng để truy cập một cách hữu ích vào các bảng được truy cập thông qua một khung nhìn dựa trên người dùng "cấp cao nhất" đã truy cập khung nhìn sẽ yêu cầu thay đổi cách các khung nhìn truy cập các bảng trong khung nhìn sao cho 'current_user' không được thiết lập, v.v. 'session_user', nhưng điều đó không thay đổi khi bạn' SET SESSION AUTHORIZATION', vì vậy nó không hữu ích nếu bạn đang sử dụng kết nối gộp thông qua pgbouncer hoặc tương tự. –

+1

Wow .. điều này thực sự cần được đề cập trong trang Tài liệu chính sách. Tôi vừa phát hiện ra vấn đề này trong ứng dụng của chúng ta nơi tất cả các bảng được tìm thấy trong một lược đồ riêng và chúng chỉ được cung cấp cho API bên ngoài thông qua một khung nhìn trong một lược đồ khác. Vì chế độ xem này được tạo bởi superuser, RLS đã bị hỏng hoàn toàn mặc dù nó đã được kiểm tra và hoạt động tốt so với bảng thực. – deinspanjer

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