Postgresql 9.3.25 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 38. kèo bóng đá pháp Hệ thống | NEXT |
Do viết lại các truy vấn củaPostgreSQLHệ thống kèo bóng đá pháp, các bảng/chế độ xem khác so với những người được sử dụng trong truy vấn ban đầu được truy cập. Khi cập nhật Các kèo bóng đá pháp được sử dụng, điều này có thể bao gồm quyền truy cập ghi vào các bảng.
Viết lại các kèo bóng đá pháp không có chủ sở hữu riêng. Chủ sở hữu của một quan hệ (bảng hoặc chế độ xem) tự động là chủ sở hữu của bản viết lại Các kèo bóng đá pháp được xác định cho nó. ThePostgreSQLHệ thống kèo bóng đá pháp thay đổi hành vi của Hệ thống điều khiển truy cập mặc định. Quan hệ được sử dụng do các kèo bóng đá pháp được kiểm tra đối với các đặc quyền của chủ sở hữu kèo bóng đá pháp, không phải Người dùng gọi kèo bóng đá pháp. Điều này có nghĩa là người dùng chỉ cần đặc quyền cần thiết cho các bảng/lượt xem mà anh ta đặt tên rõ ràng trong các truy vấn của anh ấy.
Ví dụ: Người dùng có danh sách các số điện thoại trong đó một số họ là riêng tư, những người khác được thư ký của văn phòng. Anh ấy có thể xây dựng những điều sau:
Tạo bảng điện thoại_data (văn bản người, văn bản điện thoại, boolean riêng); Tạo View Phone_Number là Chọn người, trường hợp khi không riêng tư thì điện thoại kết thúc như điện thoại Từ điện thoại_data; Cấp chọn trên Phone_Number cho Thư ký;
Không ai ngoại trừ anh ta (và các siêu người dùng cơ sở dữ liệu) có thể truy cậpPhone_dataBảng. Nhưng vìGrant, Thư ký có thể chạyChọntrênPhone_numberXem. Hệ thống kèo bóng đá pháp sẽ viết lạiChọntừPhone_numberthành AChọntừPhone_data. Vì người dùng là chủ sở hữu củaPhone_numbervà do đó là chủ sở hữu của kèo bóng đá pháp, quyền truy cập đọc vàoPhone_DataIS Bây giờ được kiểm tra chống lại các đặc kèo bóng đá phápền của anh ta và truy vấn được cho phép. Các Kiểm tra truy cậpPhone_numbercũng là đã thực hiện, nhưng điều này được thực hiện đối với người dùng gọi, vì vậy không có ai Nhưng người dùng và thư ký có thể sử dụng nó.
Các đặc quyền được kiểm tra kèo bóng đá pháp theo kèo bóng đá pháp. Vì vậy, thư ký là cho Bây giờ người duy nhất có thể nhìn thấy số điện thoại công cộng. Nhưng Thư ký có thể thiết lập một chế độ xem khác và cấp quyền truy cập vào đó cho công cộng. Sau đó, bất cứ ai cũng có thể nhìn thấyPhone_numberDữ liệu thông qua quan điểm của Bộ trưởng. Cái gì Bộ trưởng không thể làm là tạo một chế độ xem trực tiếp truy cậpPhone_data. (Thực ra anh ấy có thể, nhưng nó sẽ không hoạt động vì mọi kèo bóng đá phápền truy cập sẽ bị từ chối trong thời gian cho phép séc.) Và ngay khi người dùng sẽ chú ý, thư ký đã mở của anh ấyPhone_numberXem, anh ấy có thể thu hồi kèo bóng đá phápền truy cập của mình. Ngay lập tức, mọi kèo bóng đá phápền truy cập vào quan điểm của Bộ trưởng sẽ thất bại.
Người ta có thể nghĩ rằng kiểm tra theo kèo bóng đá pháp này là một bảo mật Lỗ, nhưng thực tế nó không phải là. Nhưng nếu nó không hoạt động theo cách này, thì Thư ký có thể thiết lập một bảng có cùng các cột nhưPhone_numbervà sao chép dữ liệu vào đó một lần mỗi ngày. Sau đó, đó là dữ liệu của riêng anh ấy và anh ấy có thể cấp kèo bóng đá phápền truy cập cho mọi người anh ấy muốn. MỘTGrantlệnh có nghĩa là,"Tôi tin tưởng bạn". Nếu ai đó bạn tin tưởng làm điều đó Trên đây, đã đến lúc phải suy nghĩ về nó và sau đó sử dụngthu hồi.
Lưu ý rằng trong khi các chế độ xem có thể được sử dụng để ẩn nội dung của một số cột sử dụng kỹ thuật được hiển thị ở trên, chúng không thể được sử dụng để che giấu đáng tin cậy dữ liệu trong các hàng không nhìn thấy trừ khiSecurity_BarrierCờ đã được đặt. Vì Ví dụ, chế độ xem sau là không an toàn:
Tạo View Phone_Number AS Chọn người, điện thoại từ điện thoại_data nơi điện thoại không thích '412%';
Chế độ xem này có vẻ an toàn, vì hệ thống kèo bóng đá pháp sẽ viết lại
bất kìChọntừPhone_numberthành AChọntừPhone_datavà thêm trình độ chuyên môn
rằng chỉ các mục trong đóĐiện thoạikhông
Bắt đầu với 412 là mong muốn. Nhưng nếu người dùng có thể tạo ra của mình
các chức năng riêng, không khó để thuyết phục người lập kế hoạch
thực hiện chức năng do người dùng xác định trướckhông thích
Biểu thức. Ví dụ:
Tạo chức năng Tricky (văn bản, văn bản) Trả về Bool dưới dạng $$ BẮT ĐẦU Nâng cao thông báo ' % = %', $ 1, $ 2; Trả lại đúng; KẾT THÚC $$ Ngôn ngữ plpgsql có giá 0,0000000000000000000001; Chọn * Từ Phone_Number nơi khó (người, điện thoại);
mỗi người và số điện thoại trongPhone_dataBảng sẽ được in dưới dạngThông báo, vì người lập kế hoạch sẽ chọn thực thi
không tốn kémTricky
Hàm
trước khi đắt hơnkhông thích
.
Ngay cả khi người dùng bị ngăn không thể xác định các chức năng mới, tích hợp
Các chức năng có thể được sử dụng trong các cuộc tấn công tương tự. (Ví dụ, hầu hết
Các chức năng đúc bao gồm các giá trị đầu kèo bóng đá phápo của chúng trong thông báo lỗi
Họ sản xuất.)
Cân nhắc tương tự áp dụng cho các kèo bóng đá pháp cập nhật. Trong các ví dụ của phần trước, chủ sở hữu của các bảng trong ví dụ cơ sở dữ liệu có thể cấp các đặc quyềnChọn, Chèn, Cập nhậtvàXóatrênShoelaceXem cho người khác, nhưng chỉChọntrênShoelace_log. Hành động kèo bóng đá pháp để ghi các mục nhật ký vẫn sẽ được thực thi thành công và người dùng khác có thể thấy các mục nhật ký. Nhưng anh ta không thể tạo ra các mục giả, anh ta cũng không thể Thao tác hoặc loại bỏ những cái hiện có. Trong trường hợp này, không có khả năng lật đổ các kèo bóng đá pháp bằng cách thuyết phục người lập kế hoạch thay đổi thứ tự hoạt động, bởi vì kèo bóng đá pháp duy nhất Tài liệu tham khảoShoelace_loglà một không đủ tiêu chuẩnChèn. Điều này có thể không đúng trong nhiều hơn Các kịch bản phức tạp.
Khi cần thiết để cung cấp bảo mật cấp hàng, TheSecurity_BarrierThuộc tính phải được áp dụng cho chế độ xem. Điều này ngăn chặn các chức năng được lựa chọn độc hại và Các nhà khai thác không được gọi trên các hàng cho đến khi chế độ xem đã được thực hiện công việc của nó. Ví dụ: nếu chế độ xem hiển thị ở trên đã được tạo Như thế này, nó sẽ được an toàn:
Tạo View Phone_Number với (Security_Barrier) Chọn người, điện thoại từ điện thoại_data nơi điện thoại không thích '412%';
chế độ xem được tạo bằngSecurity_BarrierCó thể thực hiện tồi tệ hơn nhiều so với các chế độ xem được tạo mà không cần tùy chọn này. TRONG Chung, không có cách nào để tránh điều này: Kế hoạch nhanh nhất có thể Phải bị từ chối nếu nó có thể thỏa hiệp bảo mật. Vì lý do này, Tùy chọn này không được bật theo mặc định.
Người lập kế hoạch truy vấn có tính linh hoạt hơn khi xử lý Các chức năng không có tác dụng phụ. Các chức năng như vậy được đề cập đến BẰNGLeakproof, và bao gồm nhiều đơn giản, Các toán tử thường được sử dụng, chẳng hạn như nhiều toán tử bình đẳng. Truy vấn Người lập kế hoạch có thể cho phép các chức năng như vậy được đánh giá một cách an toàn tại bất kỳ chỉ vào kèo bóng đá pháp trình thực thi truy vấn, kể từ khi gọi chúng trên các hàng vô hình với người dùng sẽ không rò rỉ bất kỳ thông tin nào về hàng không nhìn thấy. Ngược lại, một chức năng có thể gây ra lỗi tùy thuộc vào các giá trị nhận được là đối số (chẳng hạn như ném một lỗi trong trường hợp tràn hoặc phân chia theo 0) là không chống rò rỉ và có thể cung cấp thông tin quan trọng về Các hàng không nhìn thấy nếu được áp dụng trước các bộ lọc hàng của chế độ xem bảo mật.
Điều quan trọng là phải hiểu rằng ngay cả một chế độ xem được tạo bằngSecurity_Barriertùy chọn được dự định là Chỉ bảo đảm theo nghĩa hạn chế rằng nội dung của vô hình Tuples sẽ không được truyền cho các chức năng có thể không an toàn. Người dùng cũng có thể có các phương tiện khác để suy luận về những người vô hình dữ liệu; Ví dụ: họ có thể xem gói truy vấn bằng cách sử dụngGiải thíchhoặc đo thời gian chạy của các truy vấn chống lại Quan điểm. Một kẻ tấn công độc hại có thể suy ra điều gì đó về lượng dữ liệu không nhìn thấy hoặc thậm chí có được một số thông tin về phân phối dữ liệu hoặc các giá trị phổ biến nhất (vì chúng Mọi thứ có thể ảnh hưởng đến thời gian chạy của kế hoạch; hoặc thậm chí, vì họ là Cũng được phản ánh trong các thống kê tối ưu hóa, sự lựa chọn của kế hoạch). Nếu như Các loại tấn công "kênh bí mật" này là mối quan tâm, nó là có thể không khôn ngoan để cấp bất kỳ kèo bóng đá phápền truy cập nào vào dữ liệu.