Quản lý người dùng cơ sở dữ liệu là một phần đặc biệt quan trọng của bảo mật dữ liệu, vì chúng ta phải hiểu ai đang truy cập cơ sở dữ liệu và đặt quyền truy cập của mỗi người dùng. Nếu cơ sở dữ liệu không có quản lý người dùng thích hợp, quyền truy cập của người dùng sẽ trở nên rất lộn xộn và khó duy trì theo thời gian.
MongoDB là một kho lưu trữ tài liệu và cơ sở dữ liệu NoSQL. Áp dụng khái niệm RBAC (Kiểm soát truy cập dựa trên vai trò) là chìa khóa để triển khai quản lý người dùng thích hợp để quản lý thông tin đăng nhập của người dùng.
Kiểm soát Truy cập Dựa trên Vai trò (RBAC) là gì?
RBAC là một cách tiếp cận chỉ hạn chế hệ thống đối với những người dùng được ủy quyền. Trong một tổ chức, các vai trò được tạo cho các chức năng công việc khác nhau, trong cơ sở dữ liệu, sau đó chúng tôi tạo các quyền truy cập để thực hiện một số hoạt động được giao cho một vai trò cụ thể.
Nhân viên (hoặc những người sử dụng hệ thống khác) được chỉ định một số vai trò nhất định và thông qua đó họ được phân quyền để thực hiện các chức năng của hệ thống máy tính. Người dùng không được cấp quyền trực tiếp mà chỉ được cấp quyền thông qua vai trò (hoặc các vai trò) của họ. Quản lý quyền người dùng cá nhân trở thành một vấn đề chỉ cần đặt vai trò thích hợp vào tài khoản của người dùng; điều này đơn giản hóa các hoạt động chung (chẳng hạn như thêm người dùng hoặc thay đổi bộ phận người dùng).
Ba quy tắc chính được đặt ra cho RBAC là:
- Phân công vai trò :Chủ thể chỉ có thể thực thi quyền nếu chủ thể đã được chọn hoặc đã được chỉ định một vai trò.
- Vai trò của Ủy quyền :vai trò tích cực của một chủ thể phải được ủy quyền cho chủ thể. Với quy tắc 1 ở trên, quy tắc này đảm bảo rằng người dùng chỉ có thể đảm nhận vai trò của những người được ủy quyền.
- Cấp phép :Một chủ thể chỉ có thể thực thi các giấy phép nếu sự cho phép được cấp phép cho vai trò tích cực của chủ thể. Với quy tắc 1 và 2, quy tắc này đảm bảo rằng người dùng chỉ có thể thực hiện quyền đối với những người được ủy quyền.
Blog này sẽ đánh giá ngắn gọn về Kiểm soát Truy cập Dựa trên Vai trò trong cơ sở dữ liệu MongoDB.
Vai trò của Người dùng MongoDB
MongoDB có một số loại vai trò trong cơ sở dữ liệu, đó là ...
Các Vai trò Tích hợp
Cung cấp quyền truy cập vào dữ liệu và hành động đối với MongoDB thông qua ủy quyền dựa trên vai trò và có các vai trò tích hợp cung cấp một số cấp độ truy cập trong cơ sở dữ liệu.
Vai trò cấp cho một số đặc quyền để thực hiện điều gì đó trên tài nguyên đã được tạo. Các vai trò tích hợp trong MongoDB có một số danh mục:
- Cơ sở dữ liệu người dùng :Vai trò Người dùng cơ sở dữ liệu có vai trò thao tác dữ liệu trong bộ sưu tập ngoài hệ thống. Ví dụ về các vai trò của Cơ sở dữ liệu người dùng là:read, readWrite.
- Quản trị cơ sở dữ liệu :Quản trị cơ sở dữ liệu vai trò giải quyết việc quản lý quản trị cơ sở dữ liệu như quản trị người dùng, lược đồ và các đối tượng trong đó.
- Ví dụ về vai trò Quản trị cơ sở dữ liệu là:dbAdmin, userAdmin, dbOwner.
- Quản trị cụm :Vai trò của quản trị cụm là quản lý toàn bộ hệ thống MongoDB, bao gồm các bản sao và phân đoạn của nó. Ví dụ về vai trò quản trị cụm là:clusterAdmin, clusterManager.
- Sao lưu và khôi phục :Vai trò này dành riêng cho các chức năng liên quan đến sao lưu cơ sở dữ liệu trong MongoDB. Ví dụ về các vai trò là:sao lưu, khôi phục.
- Vai trò của Tất cả Cơ sở dữ liệu :Các vai trò nằm trong quản trị cơ sở dữ liệu và có quyền truy cập vào tất cả các cơ sở dữ liệu ngoại trừ cục bộ và cấu hình. Ví dụ như:readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase.
- Superuser :Vai trò có khả năng cấp quyền truy cập cho mọi người dùng, mọi đặc quyền, trong tất cả các cơ sở dữ liệu. Ví dụ về vai trò này:root
Vai trò Người dùng Xác định
Ngoài các vai trò có sẵn, chúng ta có thể tạo các vai trò riêng tùy theo nhu cầu của mình, chúng ta sẽ dành những đặc quyền gì cho những vai trò đó. Để tạo vai trò, bạn có thể sử dụng lệnh hàm db.createRole (). Ngoài khả năng tạo các vai trò, có một số hàm khác để quản lý các vai trò hiện có như:db.dropRole () hữu ích để xóa các vai trò hiện có trong cơ sở dữ liệu, hàm db.getRole () để lấy tất cả thông tin từ các vai trò cụ thể.
Hành động Đặc quyền trong MongoDB
Các hành động đặc quyền trong MongoDB là các hành động có thể được thực hiện bởi người dùng trên một tài nguyên. MongoDB có một số danh mục hành động, cụ thể là:
- Các hành động quản lý cơ sở dữ liệu, các hành động liên quan đến các lệnh liên quan đến quản trị cơ sở dữ liệu như các hành động changePassword, createCollection, createIndex.
- Hành động Truy vấn và Viết, các hành động liên quan đến việc thực thi thao tác dữ liệu trong một tập hợp. Ví dụ:trong hành động chèn, lệnh có thể được thực hiện trong hành động đó là lệnh chèn có thể chèn vào tài liệu.
- Hành động Quản lý Triển khai, các hành động liên quan đến các thay đổi trong cấu hình cơ sở dữ liệu. Một số hành động nằm trong danh mục Quản lý triển khai là cpuProfiler, storageDetails, killOp.
- Hành động sao chép, các hành động liên quan đến việc thực thi các tài nguyên nhân bản cơ sở dữ liệu như replSetConfigure, replSetHeartbeat.
- Hành động quản trị máy chủ, các hành động liên quan đến lệnh từ tài nguyên quản trị máy chủ trên mongoDB, chẳng hạn như hành động logrotate được sử dụng để xoay cơ sở dữ liệu nhật ký ở cấp hệ điều hành.
- Hành động Sharding, các hành động liên quan đến lệnh từ cơ sở dữ liệu sharding cơ sở dữ liệu, chẳng hạn như addShard để thêm các nút phân đoạn mới.
- Tác vụ phiên, các tác vụ liên quan đến phiên tài nguyên trong cơ sở dữ liệu như listSessions, killAnySession.
- Hành động chẩn đoán, các hành động liên quan đến chẩn đoán các tài nguyên như dbStats để tìm ra các điều kiện mới nhất trong cơ sở dữ liệu.
- Các hành động giám sát miễn phí, các hành động liên quan đến giám sát trong cơ sở dữ liệu.
Quản lý vai trò &người dùng MongoDB
Bạn có thể tạo người dùng và sau đó chỉ định người dùng vào các vai trò được tạo sẵn, ví dụ như sau:
db.createUser( {
user: "admin",
pwd: "thisIspasswordforAdmin",
roles: [ { role: "root", db: "admin" } ]
} );
Trong tập lệnh trên, nghĩa là người dùng quản trị sẽ được tạo bằng mật khẩu đã được xác định với vai trò gốc nội trang, nơi vai trò được bao gồm trong danh mục Người dùng siêu cấp.
Ngoài ra, bạn có thể gán nhiều hơn một vai trò cho người dùng, đây là ví dụ:
db.createUser(
{user:'businessintelligence',
pwd:'BIpassw0rd',
roles:[{'role':'read', 'db':'oltp'}, { 'role':'readWrite', 'db':'olapdb'}]
});
Người dùng Business Intelligence có 2 vai trò, đầu tiên là vai trò đọc trong cơ sở dữ liệu oltp và vai trò readWrite trong cơ sở dữ liệu olapdb.
Việc tạo vai trò do người dùng xác định có thể sử dụng lệnh db.createRole (). Bạn phải xác định mục đích của việc tạo vai trò để có thể xác định những hành động sẽ thực hiện trong vai trò đó. Sau đây là một ví dụ về việc thực hiện vai trò giám sát cơ sở dữ liệu Mongodb:
use admin
db.createRole(
{
role: "RoleMonitoring",
privileges: [
{ resource: { cluster: true }, actions: [ "serverStatus" ] }
],
roles: []
}
)
Sau đó, chúng ta có thể gán vai trò do người dùng xác định cho người dùng mà chúng ta sẽ tạo, có thể sử dụng lệnh sau:
db.createUser( {
user: "monuser",
pwd: "thisIspasswordforMonitoring",
roles: [ { role: "RoleMonitoring", db: "admin" } ]
} );
Trong khi đó, để gán vai trò cho người dùng hiện có, bạn có thể sử dụng lệnh sau:
db.grantRolesToUser(
"existingmonuser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
Để thu hồi vai trò của người dùng hiện có, bạn có thể sử dụng lệnh sau:
db.revokeRolesFromUser(
"oldmonguser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
Bằng cách sử dụng các vai trò do người dùng xác định, chúng ta có thể tạo các vai trò như chúng ta muốn tùy theo các hành động mà chúng ta sẽ đảm nhận các vai trò đó, chẳng hạn như các vai trò để hạn chế người dùng chỉ có thể xóa các hàng trên một số cơ sở dữ liệu nhất định.
Kết luận
Việc áp dụng quyền truy cập có thể cải thiện tính bảo mật. Ánh xạ các vai trò và người dùng trong cơ sở dữ liệu giúp bạn dễ dàng quản lý quyền truy cập của người dùng.
Đảm bảo rằng tất cả thông tin liên quan đến vai trò và quyền này được ghi lại đúng cách với quyền truy cập hạn chế vào tài liệu. Điều này giúp bạn chia sẻ thông tin với DBA khác hoặc nhân viên hỗ trợ và thuận tiện cho việc kiểm tra và khắc phục sự cố.