Trong các sản phẩm phần mềm thực tế, việc cài đặt các vai trò RBAC thƣờng đƣợc viết trong ngôn ngữ bậc cao nhƣ C++, .Net hoặc Java. Tuy nhiên, cấu trúc của những ngôn ngữ này rất phức tạp, gây khó khăn trong việc phân tích mã nguồn để tiến hành kiểm chứng các vai trò RBAC. Trong phạm vi nghiên cứu RBAC chúng ta chỉ quan tâm đến ba loại cấu trúc: phép gán, toán tử ảnh hƣởng đến tài nguyên hệ thống, và các phát biểu về luồng điều khiển. Để tập trung vào ba thành phần này, chúng ta định nghĩa ngôn ngữ LRBAC là ngôn ngữ trừu tƣợng đơn giản đƣợc sử dụng để mô hình hóa các cài đặt của RBAC. Ngôn ngữ này sẽ là công cụ để giải thích khía cạnh lý thuyết của phƣơng pháp đề ra. Việc xem xét mã nguồn của chƣơng trình đƣợc chuyển về xem xét mã nguồn của ngôn ngữ LRBAC. Hình 3 mô tả ngôn ngữ LRBAC dƣới dạng BNF.
S ::= Phát biểu (Satement)
(1) v E Phép gán
(3) op(o, {E}) Phép toán
(4) if (E) S[S] Câu lệnh If – then - else
(5) while (E) S Vòng lặp while
(6) for ([{S(1)}]; [E]; [{S(1)}]) S Vòng lặp for
E ::= Diễn tả (Expression)
(1) v Biến
(2) c Hằng
(3) E E Phép toán
Hình 4.2. Cú pháp của ngôn ngữ LRBAC Ý nghĩa các kí hiệu :
- Kí hiệu [] biểu diễn cho các đối tƣợng tùy chọn. - Kí hiệu {} biểu diễn phép lặp lại các đối tƣợng. - Kí hiệu | biểu diễn cho phép chọn.
- Kí hiệu phép gán trong S(1) có thể thay thế cho các phép gán toán học (=, +=, - =, *=, /=, %=, ^=), các phép dịch (<<=, >>=, >>>=), hoặc các phép gán nhị phân (&=, |=).
- Kí hiệu trong E(3) có thể đƣợc thay thế cho các phép toán (+, -, *, /, %, ^), các phép toán dịch (<<, >>, >>>), hoặc các phép toán nhị phân (|, &, ==, !=, <, >, <=, >=).
Từ các định nghĩa trên, chúng ta có thể chuyển đổi bất kỳ biểu thức toán học nào thành biểu thức tƣơng đƣơng đƣợc viết dƣới dạng chuẩn tắc liên từ (conjunctive normal form - CNF) bằng cách áp dụng luật phủ định hai lần, luật De Morgan, và luật phân phối, mỗi biểu thức có thể đƣợc viết lại thành một mệnh đề quan hệ.
Ngoài ra, trong các biểu thức S(4)(5)(6), nếu một biểu thức bao gồm nhiều hơn một mệnh đề rời rạc, chúng ta có thể tách các mệnh đề quan hệ này bằng cách thêm các biểu thức if liên tiếp nhau. Ví dụ:
Vì vậy, có thể giả sử rằng các biểu thức S(4)(5)(6), biểu thức điều kiện chỉ chứa một mệnh đề đơn.
Trong ngôn ngữ LRBAC, việc kiểm soát thực hiện các vai trò ngƣời dùng đƣợc thực hiện trong các biểu thức điều kiện. Các biểu thức điều kiện này chính là các điểm mấu chốt để quyết định ngƣời dùng nào đƣợc sử dụng quyền nào. Vì vậy, để xem xét việc thực thi các vai trò ngƣời dùng có đúng với đặc tả trong cơ sở dữ liệu RBAC hay không, chúng ta cần quan tâm đến các biểu thức điều kiện đƣợc biểu diễn trong 3 loại câu lệnh: Câu lệnh –If S(4), Câu lệnh – While S(5), Câu lệnh – For S(6) trong ngôn ngữ LRBAC. Hình 4 chỉ ra các cấu trúc và biểu diễn trong cây nhị phân trừu tƣợng.
Câu lệnh If
Biểu thức điều kiện Mệnh đề Then [Mệnh đề Else] S(4) E S S Câu lệnh For
[Biểu thức khởi tạo] [Biểu thức điều kiện] [Cập nhật] Thân câu lệnh S(6) S(1) E S(1) S Câu lệnh While
Biểu thức điều kiện Thân câu lệnh
S(5) E S
Hình 4.3: Cấu trúc cây nhị phân của ba câu lệnh.
Theo nhƣ giả thiết ở phía trên, mỗi câu lệnh – If S(4), câu lệnh – While S(5), và câu lệnh – For S(6), đều có cú pháp E = E | E. Trong biểu diễn cây nhị phân trừu tƣợng, điều này có nghĩa là nếu một nút biểu diễn phép toán E = E1 | E2 |… Ek, nút đó sẽ có k nút con và mỗi nút con tƣơng ứng với một biểu thức con ở phía bên tay phải.