Khi làm việc với bất kì cơ sở dữ liệu nào, việc phân quyền, thiết lập tài khoản cho user là một việc vô cùng cần thiết. Nhất là khi ta xây dựng các phần mềm, hoặc chia sẻ cơ sở dữ liệu trong một nhóm. Với MongoDB thì điều này cũng không phải là ngoại lệ. MongoDB cung cấp quyền truy cập của user dựa trên vai trò (roles) của user đó. Hệ quản trị này cung cấp nhiều role tích hợp để gán cho người dùng. Bên cạnh đó , nó cũng cho phép tạo người sử dụng tạo ra các role theo nhu cầu.
1. Các quyền và vai trò tích hợp có sẵn trong hệ thống
Trong MongoDB, các role có sẵn này được chia ra làm 4 nhóm role : a) Nhóm Database User Roles
Các role thuộc nhóm này được thiết lập riêng cho một database được chỉ định và chỉ cho phép người dùng thao tác trên dữ liệu chứ không cho phép tác động đến các user khác trong hệ thống. Các role này thường được phân quyền cho các client. Nhóm này bao gồm hai quyền như sau:
Bảng 10 Nhóm Database User Roles
Role Mô tả Các hàm được sử dụng
Read Chỉ cho phép đọc dữ liệu trong database được chỉ định ( không bao gồm các collection trong hệ thống như: system.indexes, system.js, system.namespacesCollection. collStats dbHash dbStats find killCursors listIndexs listCollections readWrite Cho phép đọc và ghi dữ liệu và sửa
đổi dữ liệu trong các collection không thuộc hệ thống và collection system.js của database được chỉ định.
collStats convertToCapped createCollection dbHash dbStats dropCollection createIndex dropIndex emptycapped find insert killCursors listIndexes listCollections remove renameCollectionSameDB update
b) Nhóm Database Administration Roles
Với nhóm role này, hệ thống sẽ cấp một số quyền quản trị nhất định trên một database được chỉ định cho user. Bao gồm các role như sau:
Bảng 11 Nhóm Database Administration Roles
Role Mô tả Các hàm được sử dụng
dbAdmin Quyền này cho phép user
có quyền quản trị đối với database được chỉ định.Tuy nhiên nó chỉ cho phép một số thao tác quản trị nhất định như lập lược đồ, chỉ mục, thu thập thống kê... collStats dbHash dbStats find killCursors listIndexes listCollections
dropCollection and createCollection chỉ trên system.profile
userAdmin Quyền này cho phép các
thao tác tạo và thay đổi quyền cho một user khác trong một database được chỉ định. Theo mặc định, nó cũng bao gồm thêm cả các quyền readWrite của nhóm Database user role.
changeCustomData changePassword createRole createUser dropRole dropUser grantRole revokeRole viewRole viewUser
dbOwner Quyền này là sự kết hợp
của cả 3 quyền kể trên: dbAdmin, userAdmin và readWrite.
c) Nhóm All Database Roles
Nhóm role này chỉ dành cho các database Admin. Nó có thể xem như là các quyền mở rộng hơn của 2 nhóm role trên , thay vì user chỉ có quyền trên một database thì với nhóm role này, user có quyền trên toàn bộ database có trong hệ thống. Cụ thể:
Bảng 12 Nhóm All Database Roles
Roles Mô tả
readAnyDatabase Quyền này chỉ cho phép user đọc dữ liệu giống như quyền read, tuy nhiên, thay vì chỉ được đọc trong một database thì user có thể đọc cả các database khác trong hệ thống.
readWriteAnyDatabase Quyền này bao gồm các quyền của readAnyDatabase cùng với quyền chỉnh sửa các dữ liệu trong các database mà user có thể đọc. Tương tự như quyền readWrite .
userAdminAnyDatabase Đây là quyền mở rộng hơn của quyền userAdmin ở nhóm trên. Với quyền này, user có thể quản trị các user của toàn bộ các database trong hệ thống
dbAdminAnyDatabase Giống như role dbAdmin, với quyền này user có thể quản trị dữ liệu của toàn bộ các database trong hệ thống
d) Nhóm Supperuser Roles
Nhóm role này chỉ có duy nhất một role đó là Root. Đây là quyền cao nhất trong hệ quản trị cơ sở dữ liệu MongoDB. Với quyền này người dùng có thể thực hiện mọi thao tác trên hệ thống như cung cấp quyền truy cập ,quản trị cơ sở dữ liệu ,truy cập đến mọi
nguồn lực trong cơ sở dữ liệu... Do đó quyền này chỉ được phân cho người quản trị có quyền cao nhất trong hệ thống.
Ngoài các nhóm role phân quyền theo cấp database và cấp hệ thống như trên, MongoDB còn có các nhóm role như: Backup and Restoration Roles, Cluster Administration Roles,...
2. Tạo quyền và vai trò tùy chỉnh (Role)
Bên cạnh các role được tích hợp sẵn trong hệ thống, MongoDB cũng cho phép người dùng tự tạo ra các role tùy chỉnh và thiết lập các đặc quyền riêng phù hợp với mong muốn của họ. Một yêu cầu được đặt ra khi ta tạo một role mới đó là ta phải tạo role trong một database cụ thể. Vì trong MongoDB, hệ quản trị này sử dụng sự kết hợp giữa tên database và role để đảm bảo rằng mỗi role là duy nhất. Ngoại trừ các role được tạo trong database admin thì một role chỉ có thể bao gồm các đặc quyền áp dụng cho database của nó và chỉ có thể kế thừa từ các role khác trong database của nó. Nếu một role được tạo trong database admin, thì nó có thể bao gồm các đặc quyền áp dụng cho database này, bao gồm các quyền admin, quản lý cluster và có thể kế thừa từ các role khác trong tất cả các database trong hệ thống.
Để dễ dàng quản lý các role tùy chỉnh này, MongoDB lưu trữ thông tin của chúng trong một collection đặc biệt tên là system.roles thuộc database admin. Collection này không cho phép truy cập trực tiếp vài mà phải sử dụng các lệnh quản lý role để xem và chỉnh sửa.
Khi muốn tạo một role mới, ta sử dụng phương thức db.createRole(). Giả sử, ở đây ta muốn tạo một role mới có tên là saler được mô tả như sau:
- saler cho phép đọc và chỉnh sửa dữ liệu trong database “mydata”
- saler cho phép đọc collection “Foods” trong database “shopping” Ta thực hiện tạo role mới như sau:
Đầu tiên ta sẽ khai báo một biến mới tên role để lưu trữ tên (role) và các thao tác (privileges), quyền (roles) của saler. Sau đó sử dụng cú pháp sau để tạo role:
Role tùy chỉnh mới đã được tạo thành công.