Cheat-sheet - thiết kế phân quyền và ủy quyền

Bảo toàn một phán quyết quyền qua mọi biên

PROOF PACKAGE Ba cột là ba mức phóng to của cùng một phán quyết. Màu đậm dần nghĩa là gần điểm có thể mất nghĩa hơn.

Dạng đầy đủ

(actor, atom, requested_scope, grantor_scope_now, contributors, time)

-> nen mat thong tin: bo atom, bo provenance, bo thoi diem

Dạng còn lại

true

Một con dấu không thay được vận đơn. Boolean vẫn trông hoàn chỉnh vì nó trả lời đúng câu "có hay không", nhưng không còn dữ liệu cho scope, enforcement hay audit.

Lần 1 - kiểu dữ liệuDanh sách grant -> booleanIm lặng kiểu trình biên dịch: hợp lệ thì không nói gì.
Lần 2 - tập trong bộ nhớCặp (atom, scope) -> Set<UUID>Im lặng kiểu quyền dư: kết quả vẫn trả về, chỉ là nhiều hơn.
Lần 3 - DDL và indexMảng -> đường tra khóa đơnIm lặng kiểu tập rỗng: đúng cú pháp thì không nói gì.
Lần 4 - nhãn quy trìnhTrạng thái -> một từIm lặng kiểu đúng-trong-phạm-vi-của-nó.
Mức 1 - Luồng ngoài

Từ yêu cầu tới bằng chứng

Luồng đích cần được hiện thực và chứng minh của một phán quyết quyền.

  1. Request vào, chốt atom đang hỏi(resource, action) phải là khóa của mọi bước sau.
  2. Nạp quyền trực tiếpAssignment và role binding của người thao tác.
  3. delegatedScopesFor()Đúng atom, còn requested scope.FOCUS
  4. PermissionService.check()Giao theo từng grantor, khóa theo atom.FOCUS
  5. Transaction dự kiến đặt SET LOCALScope phải chết cùng giao dịch và còn đúng atom.
  6. RLS dự kiến chặn ở hàng dữ liệuUSING và WITH CHECK cần policy thật.FOCUS
  7. Audit phải ghi contributors[]GIN phải tra đúng hình dạng mảng.FOCUS
  8. Truy vấn audit tìm lại vếtToán tử phải khớp hình dạng đã lưu.FOCUS
Mức 2 - Gói bằng chứng

Chiều nào không được làm rơi?

Đây là tập thuộc tính, không phải trình tự.

  • Atom(resource, action) phải đi cùng scope qua mọi biên.
  • Cặp scopephần chung của requested và grantor_now; vế sau chỉ gồm quyền không đến từ ủy quyền.
  • Các bản có đóng gópMọi grant có phần chung khác rỗng, không chọn hộ bản nào là tối thiểu.
  • Vòng đờiPhải chứng minh request bag và SET LOCAL không sống xuyên request.
  • Bằng chứng vật lýPolicy, role, FORCE RLS, nguồn đặt GUC, audit DDL và query cùng khớp.
Mức 3 - Phép thử 10 phút

Lần đúng một atom

Điền tên file, class hoặc method thật, không điền khẩu hiệu.

Boundary proof card

Atom:Ví dụ DOCUMENT:VIEW
Nguồn quyền:assignment hoặc DelegationGrant nào?
Phép biến đổi:scope được giao và hợp ở đâu?
Cưỡng chế:policy vật lý nào chặn hàng?
Audit + query:ghi gì và tìm lại bằng toán tử nào?

Điền đủ nghĩa là có một đường truy nguyên được trên giấy. Nó chưa chứng minh code đúng; bước kế tiếp mới là ca kiểm runtime.

Khi không thêm cơ chế mới

  • Tầng thấp hơn đã chặn đủThêm gateway phía trên chỉ tạo một nguồn drift mới.
  • Yêu cầu chỉ là role/action, không có data scopeĐừng nhập độ phức tạp delegation vào bài toán không cần provenance.