Điều khiển truy cập trên cơ sở vai trò

Trong an ninh đối với các hệ thống máy tính, **điều khiển truy cập trên cơ sở vai trò** (*[[tiếng Anh]]: Role-Based Access Control - viết tắt là RBAC*) là một trong số các phương pháp điều khiển và đảm bảo quyền sử dụng cho người dùng. Đây là một phương pháp có thể thay thế Điều khiển truy cập tùy quyền (*discretionary access control* - DAC) và Điều khiển truy cập bắt buộc (*mandatory access control* - MAC).

Điều khiển truy cập trên cơ sở vai trò (RBAC) khác với hình thức MAC và DAC truyền thống. MAC và DAC trước đây là hai mô hình duy nhất được phổ biến trong điều khiển truy cập. Nếu một hệ thống không dùng MAC thì người ta chỉ có thể cho rằng hệ thống đó dùng DAC, hoặc ngược lại, mà thôi. Song cuộc nghiên cứu trong những năm 1990 đã chứng minh rằng RBAC không phải là MAC hoặc DAC.
 
Trong nội bộ một tổ chức, các vai trò (*roles*) được kiến tạo để đảm nhận các chức năng công việc khác nhau. Mỗi vai trò được gắn liền với một số quyền hạn cho phép nó thao tác một số hoạt động cụ thể ('permissions'). Các thành viên trong lực lượng cán bộ công nhân viên (hoặc những người dùng trong hệ thống) được phân phối một vai trò riêng, và thông qua việc phân phối vai trò này mà họ tiếp thu được một số những quyền hạn cho phép họ thi hành những chức năng cụ thể trong hệ thống.

Vì người dùng không được cấp phép một cách trực tiếp, song chỉ tiếp thu được những quyền hạn thông qua vai trò của họ (hoặc các vai trò), việc quản lý quyền hạn của người dùng trở thành một việc đơn giản, và người ta chỉ cần chỉ định những vai trò thích hợp cho người dùng mà thôi. Việc chỉ định vai trò này đơn giản hóa những công việc thông thường như việc cho thêm một người dùng vào trong hệ thống, hay đổi ban công tác (*department*) của người dùng.

RBAC khác với các danh sách điểu khiển truy cập (*access control list - ACL*) được dùng trong hệ thống điều khiển truy cập tùy quyền, ở chỗ, nó chỉ định  các quyền hạn tới từng hoạt động cụ thể với ý nghĩa trong cơ quan tổ chức, thay vì tới các đối tượng dữ liệu hạ tầng. Lấy ví dụ, một danh sách điều khiển truy cập có thể được dùng để cho phép hoặc từ chối quyền truy cập viết một tập tin hệ thống (*system file*), song nó không nói cho ta biết phương cách cụ thể để thay đổi tập tin đó. Trong một hệ thống dùng RBAC, một thao tác có thể là việc một chương trình ứng dụng tài chính kiến tạo một giao dịch trong 'tài khoản tín dụng' (*credit account transaction*), hay là việc một chương trình ứng dụng y học khởi thủy một bản ghi 'thử nghiệm nồng độ đường trong máu' (*blood sugar level test*). Việc chỉ định quyền hạn cho phép thi hành một thao tác nhất định là một việc làm đầy ý nghĩa, vì các thao tác đã được phân định tinh tế và mỗi cá nhân thao tác có một ý nghĩa riêng trong chương trình ứng dụng.

Với khái niệm về hệ thống cấp bậc trong vai trò (*role hierarchy*) và khái niệm về các ràng buộc (*constraints*), ta có thể điều khiển RBAC để kiến tạo hoặc mô phỏng điều khiển truy cập dùng bố trí mắt lưới (*Lattice-Based Access Control* - LBAC). Vì thế RBAC có thể được coi như là một siêu tập  (*superset*) của LBAC.

Khi định nghĩa một mô hình RBAC, những quy ước sau đây là những quy ước hữu dụng và cần phải cân nhắc:

* U	=	(User)Người dùng			=	Một người hoặc một tác nhân tự động.
* R	=	(Role)Vai trò			=	Chức năng công việc / Danh hiệu dùng định nghĩa một cấp bậc quyền thế.
* P	=	Quyềnn được cấp 		=	Sự phê chuẩn một hình thức truy cập tài nguyên.
* S	=	(Session)Phiên giao dịch			=	Một xếp đặt liên kết giữa U, R và P
* UA	=	(User Assignment)Chỉ định người dùng.		 
* PA	=	(Permission Assignment)Cấp phép
* RH	=	(Role Hierarchy)Sắp xếp trật tự một phần nào theo thứ tự cấp bậc của vai trò. RH	còn có thể được viết là &gt;
* Một người dùng có thể có nhiều vai trò.
* Một vai trò có thể có thể có nhiều người dùng.
* Một vai trò có thể có nhiều phép được cấp cho nó.
* Một phép được cấp có thể được chỉ định cho nhiều vai trò.

Phép được cấp cho các vai trò đối lập có thể sẽ bị hạn chế khả năng thừa kế của chúng, nếu một hạn chế (*constraint*) nào đấy đặt một điều luật giới hạn nó. Chẳng hạn, một cá nhân không thể vừa được phép kiến tạo một trương mục đăng nhập cho một người nào đấy, vừa được phép ủy quyền thủ tục.

Chính vì vậy, bằng việc sử dụng ký hiệu của lý thuyết tập hợp (*set theory*), chúng ta có thể viết:

* PA là một tiểu tập của (hoặc bằng) P x R và là một phép cấp có mối quan hệ nhiều đối nhiều (*many to many*) với chỉ định vai trò. 
* UA là một tiểu tập của (hoặc bằng) U x R và có mối quan hệ nhiều đối nhiều (*many to many*) với chỉ định vai trò. 
* RH là một tiểu tập của (hoặc bằng) R x R

Ký hiệu: x &gt; y có nghĩa là y thừa kế các phép cấp của x.

Một người dùng có thể cùng một lúc có một bội số các phiên giao dịch với nhiều phép được cấp khác nhau (*multiple simultaneous sessions with different permissions*).

Việc sử dụng RBAC để quản lý các đặc quyền của người dùng trong một hệ thống duy nhất hay trong một chương trình ứng dụng là một thực hành tốt nhất được rộng rãi chấp thuận. Các hệ thống bao gồm thư mục năng động (*Active Directory*) của Microsoft,  SELinux, Oracle DBMS, PostgreSQL 8.1, SAP R/3 và nhiều cái khác đều hầu như thực thi một trong những hình thức của RBAC.

Tuy nhiên, việc sử dụng RBAC để quản lý quyền lợi của người dùng, trên toàn thể các chương trình ứng dụng, là một việc làm còn nhiều tranh luận. Sở dĩ như vậy là vì người dùng thường là một đơn vị đặc hữu (*unique*), cho nên nhiệm vụ định nghĩa các vai trò tương ứng (*defining sufficient roles*) và chỉ định các tư cách hội viên cho các vai trò một cách phù hợp, trong một tổ chức với hạ tầng cơ sở kỹ thuật thông tin (**IT**) không đồng nhất, hòng nắm bắt các nhu cầu về quyền lợi, trong khi các nhu cầu này có tầm trải rộng trên hàng chục, hằng trăm hệ thống và trên các chương trình ứng dụng, là một việc hết sức phức tạp. Vấn đề này, và những chiến lược thay thế, hiện đang được bàn luận trên bạch thư (*white paper*): Beyond Roles: A Practical Approach to Enterprise User Provisioning  (*Bên ngoài giới hạn của các vai trò: Một tiếp cận thực tiễn trong Kinh doanh Cung cấp Người dùng*).
## Ghi chú

## Xem thêm
* LBAC Điều khiển truy cập dùng bố trí mắt lưới (tương tự như Điều khiển truy cập bắt buộc)  (*Lattice-Based Access Control (Equivalent to [http://en.wikipedia.org/wiki/Mandatory_Access_Control Mandatory Access Control] (MAC) *).
* Nhãn hiệu an ninh (*Security labels*)
* Phân cấp an ninh (*Security classification*)
* Kênh truyền che đậy (*Covert channel*)
* Tường Trung Hoa (*Chinese wall*)
* Xác thực (*Authentication*)
* Sự tin cậy mù quáng (*Blind credential*)
* Sudo (một chương trình ứng trong hệ điều hành Unix cho phép người dùng có đẳng cấp thấp thao tác những chức năng của người dùng siêu đẳng cấp.) (**su**peruser **do**) Unix program

## Liên kết ngoài
*Role Based Access Controls at NIST  - huge US government website with lots of information on the theory and implementation of RBAC
*XACML core and hierarchical role based access control profile - OASIS XACML standard. (PDF file)
*RBAC for WebApps using LDAP RBAC for WebApps using LDAP
*System Administration Guide: Basic Administration setting up RBAC for Solaris Operating Environment
*RBAC: An Alternative to the Superuser Model Role-Based Access Control (Overview) for Solaris Operating Environment
*Beyond Roles: A Practical Approach to Enterprise User Provisioning