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
trueMộ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.
- Request vào, chốt atom đang hỏi
(resource, action)phải là khóa của mọi bước sau. - Nạp quyền trực tiếpAssignment và role binding của người thao tác.
- delegatedScopesFor()Đúng atom, còn requested scope.FOCUS
- PermissionService.check()Giao theo từng grantor, khóa theo atom.FOCUS
- Transaction dự kiến đặt SET LOCALScope phải chết cùng giao dịch và còn đúng atom.
- RLS dự kiến chặn ở hàng dữ liệuUSING và WITH CHECK cần policy thật.FOCUS
- Audit phải ghi contributors[]GIN phải tra đúng hình dạng mảng.FOCUS
- 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
requestedvà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.