Mô hình RBAC cơ sở có hai tính chất vô cùng quan trọng nhƣ đã đƣợc nói đến trong chƣơng III.
Tính chất 3.1 (Ủy quyền vai trò – Role authorization)
Trong đó :
- S là tập chủ thể,
- là phép gán nhiều - nhiều từ tập ngƣời dùng sang tập vai trò - subject_roles là phép gán một – nhiều từ một chủ thể đến các vai trò của nó
- role_users là phép gán một - nhiều từ một vai trò đến ngƣời dùng có mối liên hệ vai trò ấy.
Tính chất ủy quyền vai trò xác định mỗi vai trò r đƣợc sở hữu bởi bất kì chủ thể s cũng đƣợc sở hữu bởi ngƣời dùng của chủ thể đó.
Tính chất 3.2. (Ủy quyền truy cập đối tƣợng – Object access authorization)
Trong đó:
- P là tập các quyền. - R là tập các vai trò.
- role_users là phép gán một - nhiều từ một vai trò đến ngƣời dùng có mối liên hệ vai trò ấy
- role_permissions là phép gán một – nhiều từ một vai trò đến quyền của vai trò đó
Tính chất ủy quyền truy cập đối tƣợng phát biểu rằng nếu ngƣời dùng u có thể truy cập cho phép p = (op, o), chúng ta kí hiệu là với và , khi đó tồn tại một vai trò r mà r nằm trong danh sách của các vai trò đƣợc gán cho u và r có thể truy cập p. Đây là tính chất vô cùng quan trọng giúp ta xác định đƣợc liệu ngƣời dùng có vi phạm các quyền cho phép hay không.
Nhƣ vậy, nếu chúng ta có thể tìm đƣợc tất cả các điểm trong chƣơng trình ảnh hƣởng đến việc truy cập tài nguyên và đánh giá việc vi phạm tính chất 3.2 tại các điểm điều kiện này, chúng ta sẽ kiểm chứng đƣợc tính đúng đắn của việc cài đặt các luật RBAC.
Các tác giả đã đƣa ra thuật toán 1 để kiểm chứng tính phù hợp giữa đặc tả và cài đặt các chính sách RBAC. Thuật toán sẽ tìm ra tất cả các điểm xác định điều kiện ảnh hƣởng đến truy cập tài nguyên, sau đó đánh giá tính vi phạm tính chất 3.2 ở các điểm này. Để đơn giản hóa, thuật toán sẽ không làm việc trên các hệ thống đa tiến trình, nói cách khác, chỉ có duy nhất một tiến trình (chủ thể) đƣợc tạo ra bởi ngƣời dùng tại bất kì thời điểm nào.
Một số kí hiệu và định nghĩa đƣợc sử dụng trong thuật toán:
- Nếu một nút biểu diễn một cú pháp LRBAC, chúng ta kí hiệu mối quan hệ này bởi
- Không cần để ý đến chủ thể đƣợc tạo bởi ngƣời dùng, mỗi tiến trình kiểm tra sẽ thao tác trên một bộ 4 phần tử <u, r, op, o>. Bộ này để ký hiệu cho: ngƣời dùng u thực hiện phép toán op trên đối tƣợng o dƣới vai trò r. Mỗi phần tử trong bộ sẽ nhận giá trị nếu chúng ta không biết giá trị của nó hoặc nhận giá trị nhƣ là một biến, hoặc nhƣ là một hằng nếu giá trị của nó đã đƣợc xác định.
- Giá trị của bộ t có thể thay đổi trong quá trình gán. Nếu nút n bao gồm phép gán nhƣ đƣợc chỉ ra trong S(1) và E(1),(2),(3) của ngôn ngữ LRBAC, phép gán này sẽ ảnh hƣởng đến bộ t. Chúng ta sẽ ký hiệu sự kiện này bởi phép thay thế replace(t, n). Ví dụ, nếu chúng ta có bộ t = < , , write, o> và nút n có phép gán
, khi đó phép toán thay thế replace(t, n) = < , , write, input.txt> - Với mỗi bộ t = <u, r, op, o>, chúng ta cần phải biết bộ này có vi phạm qui tắc ủy
quyền (Định nghĩa 3.2) và qui tắc truy cập đối tƣợng (định nghĩa 3.3) hay không. Nếu t không vi phạm, chúng ta sẽ chấp nhận t, nếu không t sẽ bị loại. Có thể hình thức hóa phép toán chấp nhận dƣới dạng công thức nhƣ sau:
Thuật toán lấy cây ngữ pháp trừu tƣợng (AST) của chƣơng trình theo ngôn ngữ LRBAC và cơ sở dữ liệu RBAC là tham số đầu vào. Ý tƣởng của thuật toán có thể đƣợc mô tả nhƣ sau :
Đầu tiên, chúng ta thăm tất cả các nút của cây AST. Mỗi khi tìm thấy nút n0 có phép toán truy cập đến tài nguyên hệ thống, chúng ta khởi tạo một bộ mới. Ta lƣu lại điểm này (điểm P) của cây AST và tiến hành thăm cây ngƣợc trở lại cho đến gốc của cây. Mỗi khi gặp phép gán hoặc phép điều kiện, ta tiến hành cập nhật các giá trị của bộ. Nếu chúng ta gặp một phép gán, mỗi bộ sẽ đƣợc thay thế bởi phép toán replace. Trong trƣờng hợp gặp biểu thức điều kiện với k mệnh đề, chúng ta nhân bản k phiên bản của mỗi bộ và sau đó thực hiện phép toán replace mỗi phiên bản với mệnh đề phân biệt. Sau khi hoàn thành việc thăm ngƣợc cây từ nút n0 đến gốc, nếu có bất kì tupe
nào mà chúng ta có accept(t) = true tức là nút n0 thỏa mãn DB. Nếu chúng ta tìm ra một nút n0 vi phạm DB, thuật toán sẽ dừng lại và có thể kết luận việc cài đặt có vi phạm định nghĩa RBAC trong cơ sở dữ liệu. Trong trƣờng hợp không tìm ra nút vi phạm DB, chúng ta sẽ bắt đầu lại thuật toán từ điểm P và tiếp tục thăm cây AST. Thuật toán kết thúc khi chúng ta thăm đƣợc toàn bộ cây AST từ gốc. Trong trƣờng hợp không tìm thấy bất kì bộ nào vi phạm DB, ta có thể kết luận việc cài đặt các chính sách RBAC trong chƣơng trình không vi phạm các luật RBAC đã đƣợc định nghĩa trong DB. Thuật toán sẽ kết thúc khi cây AST là cây hữu hạn phần tử.
Mã giả của thuật toán:
Thuật toán 1: Thuật toán kiểm tra sự phù hợp giữa đặc tả và cài đặt RBAC
Đầu vào : Cây cú pháp trừu tƣợng AST của ngôn ngữ LRBAC
Đầu vào : Cơ sở dữ liệu RBAC mô tả các vai trò
Đầu ra : Có phù hợp hay không
Dữ liệu : n, n0, n’ : Các nút của cây AST
Procedure ASTTraversal (AST, DB) begin forall do if then if( )then return false return true end Procedure isConformant(n0) begin n n0
repeat if then forall do return if and then forall do forall do until n = AST.root forall do ifaccept(t)then returntrue returnfalse end
Chƣơng 5
CHƢƠNG TRÌNH CÀI ĐẶT KIỂM CHỨNG THUẬT TOÁN
Từ những nghiên cứu về mặt lý thuyết của việc kiểm chứng sự phù hợp giữa thiết kế các vai trò trong cơ sở dữ liệu RBAC và việc cài đặt các thiết kế này trong chƣơng trình đã đƣợc giới thiệu trong chƣơng 4, chƣơng 5 sẽ đề xuất giải pháp và mô tả cách thức để thực hiện thuật toán trên trong ngôn ngữ java đƣợc viết dƣới dạng một thành phần gắn thêm (plugin) trong Eclipse đồng thời đánh giá hiệu quả của chƣơng trình.