Do viết lại các truy vấn củaPostgreSQLHệ thống quy cách đọc kèo bóng đá, các bảng/chế độ xem khác so với các bảng được sử dụng trong truy vấn ban đầu được truy cập. Khi các quy cách đọc kèo bóng đá cập nhật đượ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 quy cách đọc kèo bóng đá không có chủ sở hữu riêng. Chủ sở hữu của một mối quan hệ (bảng hoặc chế độ xem) tự động là chủ sở hữu của các quy cách đọc kèo bóng đá viết lại được xác định cho nó. ThePostgreSQLHệ thống quy cách đọc kèo bóng đá thay đổi hành vi của hệ thống điều khiển truy cập mặc định. Các mối quan hệ được sử dụng do các quy cách đọc kèo bóng đá được kiểm tra đối với các đặc quyền của chủ sở hữu quy cách đọc kèo bóng đá, chứ không phải người dùng gọi quy cách đọc kèo bóng đá. Điều này có nghĩa là người dùng chỉ cần các đặc quyền cần thiết cho các bảng/chế độ xem được đặt tên rõ ràng trong các truy vấn của họ.
Ví dụ: Người dùng có danh sách các số điện thoại trong đó một số trong số họ là riêng tư, những người khác được trợ lý của văn phòng quan tâm. Người dùng có thể xây dựng như sau:
Tạo bảng điện thoại_data (văn bản cá nhân, 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 Trợ lý;
Không ai ngoại trừ người dùng đó (và siêu người dùng cơ sở dữ liệu) có thể truy cậpPhone_data
Bảng. Nhưng vì12062_12069
, Trợ lý có thể chạyChọn
trênPhone_number
Xem. Hệ thống quy cách đọc kèo bóng đá sẽ viết lạiChọn
từPhone_number
thành AChọn
từPhone_data
. Vì người dùng là chủ sở hữu củaPhone_number
Và do đó, chủ sở hữu của quy cách đọc kèo bóng đá, truy cập đọc vàoPhone_data
hiện được kiểm tra đối với các đặc quyền của người dùng và truy vấn được cho phép. Kiểm tra truy cậpPhone_number
cũng được thực hiện, nhưng điều này được thực hiện chống lại người dùng gọi, vì vậy không ai ngoài người dùng và trợ lý có thể sử dụng nó.
Các đặc quyền được kiểm tra quy cách đọc kèo bóng đá theo quy cách đọc kèo bóng đá. Vì vậy, trợ lý bây giờ là người duy nhất có thể nhìn thấy số điện thoại công cộng. Nhưng trợ lý có thể thiết lập một quan điểm khác và cấp quyền truy cập cho công chúng. Sau đó, bất cứ ai cũng có thể nhìn thấyPhone_number
Dữ liệu thông qua quan điểm của Trợ lý. Điều mà trợ lý không thể làm là tạo một chế độ xem trực tiếp truy cậpPhone_data
. (Trên thực tế, trợ lý có thể, nhưng nó sẽ không hoạt động vì mọi quyền truy cập sẽ bị từ chối trong khi kiểm tra quyềnPhone_number
Xem, người dùng có thể thu hồi quyền truy cập của trợ lý. Ngay lập tức, mọi quyền truy cập cách đọc kèo bóng đáo chế độ xem trợ lý sẽ thất bại.
Người ta có thể nghĩ rằng kiểm tra theo quy cách đọc kèo bóng đá này là một lỗ hổng bảo mật, 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, trợ lý có thể thiết lập một bảng có cùng cột nhưPhone_number
và sao chép dữ liệu cách đọc kèo bóng đáo đó một lần mỗi ngày. Sau đó, đó là dữ liệu của chính trợ lý và trợ lý có thể cấp quyền truy cập cho mọi người họ muốn. MỘTGrant
lệnh có nghĩa là,Tôi tin tưởng bạnKhăn. Nếu ai đó bạn tin tưởng làm điều ở trên, đã đế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 bằng cách 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_Barrier
Cờ đã được đặt. 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 quy cách đọc kèo bóng đá sẽ viết lại bất kỳ nàoChọn
từPhone_number
thành AChọn
từPhone_Data
và thêm trình độ chỉ các mục nhập trong đóĐiện thoại
14943_15124khô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_Data
Bảng sẽ được in dưới dạngThông báo
, vì người lập kế hoạch sẽ chọn thực hiện rẻ tiềnTricky
chức năng trước khi đắt hơnkhông thích
. Ngay cả khi người dùng bị ngăn chặn xác định các chức năng mới, các chức năng tích hợp 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 hàm đúc bao gồm các giá trị đầu cách đọc kèo bóng đáo của chúng trong các thông báo lỗi chúng
Cân nhắc tương tự áp dụng cho các quy cách đọc kèo bóng đá 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 cơ sở dữ liệu ví dụ có thể cấp các đặc quyềnChọn
, Chèn
, Cập nhật
vàXóa
trênShoelace
Xem cho người khác, nhưng chỉChọn
trênShoelace_log
16454_16831Shoelace_log
là một không đủ tiêu chuẩnChèn
. Điều này có thể không đúng trong các tình huống phức tạp hơn.
Khi cần thiết để cung cấp bảo mật cấp hàng,Security_Barrier
thuộc tính nên được áp dụng cho chế độ xem. Điều này ngăn chặn các hàm và toán tử được chọn một cách độc hại được truyền các giá trị từ các hàng cho đến khi chế độ xem đã thực hiện công việc của nó. Ví dụ: nếu chế độ xem được hiển thị ở trên đã được tạo như thế này, nó sẽ được bảo mật:
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_Barrier
Có 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. Nói 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 gọi làLeakproof
, và bao gồm nhiều toán tử đơn giản, thường được sử dụng, chẳng hạn như nhiều toán tử bình đẳng. Trình lập kế hoạch truy vấn 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ỳ điểm nào trong quá trình thực thi truy vấn, vì việc gọi chúng trên các hàng vô hình cho người dùng sẽ không rò rỉ bất kỳ thông tin nào về các hàng không nhìn thấy. Hơn nữa, các chức năng không có đối số hoặc không được thông qua bất kỳ đối số nào từ chế độ xem rào cản bảo mật không phải được đánh dấu làLeakproof
Để được đẩy xuống, vì chúng không bao giờ nhận được dữ liệu từ chế độ xem. Ngược lại, một hàm có thể gây ra lỗi tùy thuộc cách đọc kèo bóng đáo các giá trị nhận được dưới dạng đối số (chẳng hạn như một hàm gây ra lỗi trong trường hợp tràn hoặc phân chia theo 0) không bị 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_Barrier
Tùy chọn chỉ nhằm bảo mật theo nghĩa hạn chế rằng nội dung của các bộ dữ liệu vô hình sẽ không được chuyển đến các chức năng không an toàn. Người dùng cũng có thể có các phương tiện khác để đưa ra các suy luận về dữ liệu chưa từng thấy; Ví dụ: họ có thể xem gói truy vấn bằng cách sử dụngGiải thích
19277_19767