Video: Việt Nam có nên đổi tiền để tạo thuận lợi cho giao dịch - Các nghi vấn sẽ đổi tiền đã rõ! 2025
Một mô hình hữu ích cho bảo mật là áp dụng các quyền dựa trên dữ liệu trong một bản ghi thay vì chỉ định riêng cho phép ghi. Điều này có thể dựa trên siêu dữ liệu, cột cá nhân (Bigtable clone), hoặc các yếu tố (Cơ sở dữ liệu tổng hợp NoSQL).
Một ví dụ điển hình là một tên khách hàng được đề cập trong một tài liệu. Bạn có thể muốn hạn chế quyền truy cập vào tất cả các tài liệu đề cập đến - khách hàng chỉ cho những người có quyền truy cập vào thông tin của khách hàng này. Bạn có thể hạn chế quyền truy cập vào các tài liệu này bằng cách xử lý dữ liệu bên trong tài liệu và áp dụng các điều khoản bảo mật có liên quan dựa trên giá trị của dữ liệu đó.
Không có cơ sở dữ liệu NoSQL nào cung cấp khả năng này ngay ngoài hộp. Đó là bởi vì các điều khoản phải được gán cho bản ghi sau khi dữ liệu được lưu lại bởi ứng dụng nhưng trước khi nó có sẵn để truy xuất bởi các ứng dụng hoặc người dùng khác. Vì vậy, phân công cho phép này phải xảy ra trong ranh giới giao dịch.
Ngoài ra, rất ít cơ sở dữ liệu NoSQL hỗ trợ các giao dịch phù hợp với ACID (MarkLogic, FoundationDB, và Neo4j, làm ví dụ). Nếu một cơ sở dữ liệu không hỗ trợ việc gán các quyền dựa trên dữ liệu bên trong một tài liệu nhưng hỗ trợ các thao tác ACID và các trình khởi tạo trước thì có thể thực hiện một cách dễ dàng.
Nói chung bạn dễ viết một trình kích hoạt kiểm tra sự có mặt của một giá trị bên trong một bản ghi và để sửa đổi các điều khoản dựa trên giá trị của nó. Miễn là một cơ sở dữ liệu hỗ trợ làm như vậy trong quá trình cam kết, chứ không phải sau cam kết, thì bạn biết dữ liệu của bạn được thực hiện an toàn bằng cách sử dụng một trình kích hoạt trước khi đơn giản.
Ví dụ: Máy chủ MarkLogic hỗ trợ các giao dịch ACID tuần tự đầy đủ và các trình kích hoạt trước cam kết. Dưới đây là một tài liệu XML đơn giản mà tôi muốn hỗ trợ cho kiểm soát truy cập dựa trên thuộc tính:
jbloggs ACME Lorem Ipsum Dolar Sit Amet …
Các trình kích hoạt của MarkLogic Server sử dụng ngôn ngữ XQuery của W3C. Ví dụ XQuery sau đây là một kích hoạt đơn giản, khi được cài đặt trong MarkLogic, gán quyền đọc và viết:
phiên bản xquery "1. 0-ml"; nhập mô đun không gian tên trgr = ' // marklogic. com / xdmp / triggers 'at' / MarkLogic / triggers. xqy '; khai báo biến $ trgr: uri as xs: string external; tuyên bố biến $ trgr: kích hoạt như node () bên ngoài; if ("ACME" = fn: doc ($ trgr: uri) / MeetingReport / Customer), sau đó xdmp: document-set-permissions ($ trgr-uri, (xdmp: permission ("seniorsales", "update"), xdmp: cho phép ("bán hàng", "đọc"))) else ()
Một lần kích hoạt được cài đặt trong tập tin setperms.xqy trong Cơ sở dữ liệu Modules của Máy chủ MarkLogic, thực hiện đoạn mã sau trong ứng dụng mã hóa web cho MarkLogic - Query Console để kích hoạt trình kích hoạt. Trên cài đặt máy chủ MarkLogic mặc định, bạn có thể tìm thấy Bảng điều khiển truy vấn tại URL: // localhost: 8000 / qconsole.
Đây là mã cho biết cách cài đặt trình kích hoạt bằng cách sử dụng Query Console:
phiên bản xquery "1. 0-ml"; nhập mô đun không gian tên trgr = " // marklogic. com / xdmp / triggers" tại '/ MarkLogic / triggers. xqy '; trgr: create-trigger ("setperms", "Set Sales Doc Permissions", trgr: trigger-data-event (trgr: collection-scope ("meetingreports"), trgr: tài liệu-nội dung ("sửa đổi"), trgr: trước (), fn: true (), xdmp: mặc định-cho phép (), fn: sai ())