Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Mô hình phân quyền : ACL, DAC, MAC, RBAC
Mô hình phân quyền : ACL, DAC, MAC, RBAC
ACL (Access Control List - Danh sách điều khiển truy cập)
Là hình thức phân quyền dựa trên một danh sách các quyền truy cập.
-
Subject
có thểAction
tớiObject
. - Dựa vào người dùng và nhóm người dùng.
Ví dụ
- Cho phép Nguyễn Văn A tạo bài viết
'Subject' : 'Nguyễn Văn A'
'Action' : 'Tạo'
'Đối tượng' : 'Bài viết'
- Nguyễn Văn A có thể tạo bài viết..
Ví dụ : Phân quyền trong MySql
.
DAC (Discretionary Access Control - Điều khiển truy cập tùy quyền)
Là hình thức phân quyền dựa trên một danh sách các quyền truy cập, DAC khác ACL ở chỗ chủ thể của đối tượng có thể ủy quyền cho một chủ thể khác.
-
Subject
có thểAction
tớiObject
. -
Subject
có thểGrant
choSubject
khác. - Dựa vào người dùng và nhóm người dùng.
Ví dụ
- Cho phép Nguyễn Văn A tạo bài viết
'Subject' : 'Nguyễn Văn A'
'Action' : 'Tạo'
'Đối tượng' : 'Bài viết'
- Nguyễn Văn A có thể tạo bài viết.
- Nguyễn Văn A cho phép Lê Văn B tạo bài viết
'Subject' : 'Lê Văn B'
'Action' : 'Tạo'
'Đối tượng' : 'Bài viết'
- Lê Văn B có thể tạo bài viết.
Ví dụ : Phân quyền file trong các hệ điều hành.
MAC (Mandatory access control - Điều khiển truy cập bắt buộc)
Là hình thức phân quyền dựa trên một danh sách các quyền truy cập, tuy nhiên thay vì hướng chủ thể thì MAC có thể hướng cả đối tượng nữa.
-
Subject
có thểAction
tớiObject
. -
Object
có thểAction
bởiObject
. - Dựa vào người dùng và nhóm người dùng.
Ví dụ
- Cho phép Nguyễn Văn A tạo bài viết
'Subject' : 'Nguyễn Văn A'
'Action' : 'Tạo'
'Đối tượng' : 'Bài viết'
- Nguyễn Văn A có thể tạo bài viết.
- Bài viết có thể sửa bởi Lê Văn B
'Đối tượng' : 'Bài viết'
'Action' : 'Tạo'
'Subject' : 'Lê Văn B'
- Lê Văn B có thể tạo bài viết.
Ví dụ : SELinux.
RBAC (Role-Based Access Control - Điều khiển truy cập theo vai)
Là hình thức phân quyền dựa vào vai, mỗi Subject sẽ thuộc một hoặc nhiều Role. Mỗi Role lại có một hoặc nhiều Permission thực thi Action tới Object.
- Một
Subject
thuộc một hoặc nhiềuVai
- Một
Vai
có một hoặc nhiềuQuyền
.
Ví dụ
- Người dùng Nguyễn Văn A có quyền Admin, User.
- Người dùng Lê Văn B có quyền User.
- User có quyền
Đọc
bài viết. - Admin có quyền
Đọc
,Thêm
.Sửa
,Xóa
bài viết.
=>
- Người dùng A có quyền
Đọc
,Thêm
.Sửa
,Xóa
bài viết. - Người dùng Lê Văn B có quyền
Đọc
bài viết.
Ví dụ : Phân quyền của VBulettin, Xenforo, ...v...v...
Kết luận
Có thể dễ dàng thấy, với các hệ thống như ACL, MAC, DAC, việc implement phân quyền cho các hệ thống trở nên dễ dàng hơn. Hệ thống chỉ cần kiểm tra Subject là ai, Object là gì, Action là sao, rồi so sánh với danh sách truy cập để quyết định Action này có thể được thực hiện hay không.
Tuy nhiên, khi có nhiều người dùng có quyền giống nhau, việc bổ sung quyền trở nên phức tạp thì bạn có thể dùng RBAC. Giả sử như trên ví dụ trên, ta có 200 người dùng. Và người dùng có thể sửa bài viết, với ACL bạn sẽ phải thêm 200 bản ghi "Subject X" có thể "Sửa" "Bài viết".
Với RBAC, một khi 200 người dùng đã được gán vào user, mỗi khi user có một quyền mới, ta chỉ cần thêm 1 bản ghi, đó là "User" có quyền "Sửa" "Bài viết".
Hi vọng qua bài viết này, các bạn có thể dễ dàng chọn lựa mô hình phân quyền phù hợp cho hệ thống của mình.
Nevermore - 04-07-2019

