mongodb_logo

Trong những bài thực hành trước đây mình chỉ dùng noauth để bỏ qua việc kết nối database với username password và việc phân quyền user vì các lý do:

a. Dễ trong việc thực hành thêm xóa sửa.

b. Các Tools UI như Robomongo chưa thể kết nối authentication vì mã hóa SCRAM-SHA-1 chưa được hỗ trợ trong phiên bản hiện tại (0.8.5) chờ bản 0.9.0 của nhà phát hành – do đó việc dùng tools để xem là không thể.

Vì lý do trên nên mình sẽ hướng dẫn tại bài này phần kết nối và làm việc với command line (cmd) windows

1. Các Roles của MongoDB

Xem lại bài viết Mô Tả Và Vai Trò Của Roles Trong MongoDB.

2. Start Mongodb với noauth

Mở Command Prompt bằng cách start rồi gõ cmd.

Dùng lệnh cd để trỏ về đường dẫn cài đặt Mongodb hoặc chạy thẳng lệnh đến file mongod.exe như bên dưới vì minh cài mongodb trên ổ C nên gọi từ c -> mongodb > folder bin

mình đang dùng path mặc định là c:\data\db

run-mongodb-noauth

Như vậy là đã start server xong bây giờ chúng ta mở thêm 1 cmd nữa dùng để làm client kết nối tới server

(ngay đoạn này các bạn có thể dùng robomongo kết nối vì nó ko cần authentication).

Như trên chúng ta cũng trỏ về thư mục cài MongoDB\bin hoặc chạy thẳng lệnh:

run mongo client noauth

Bây giờ chúng ta dùng lệnh

Để xem có bao nhiêu database

show-dbs

3. Tạo System User Administrator

Trước tiên chúng ta dùng lệnh use admin để chọn database và để add user trên đó. Sau đó tạo user với name là SuperAdmin pass là 123456 roles userAdminAnyDatabase

create-superadmin-mongodb

Chúng ta đã thêm admin cho các database của MongoDB

4.Tạo UserAdmin cho từng database

Bây giờ mình sẽ tạo database là testadmin và tạo user admin riêng chỉ cho database này thôi

create-useradmin-cho-database

Các bạn chú ý chỗ mình bôi xanh kẻo nhầm nhé, nếu các bạn muốn thêm nhiều rules thì add như sau:

5. Tạo 1 User chỉ cho Read Database

Chúng ta sẽ tạo thêm 1 user với roles là chỉ cho read không cho xóa xửa thêm để chúng ta có thể test phân biệt các roles với nhau

User-read-database

Vậy là xong user mẫu để test rồi vì đang kết nối noauth chúng ta sẽ dùng robomongo để kiểm tra nhé.

(các bạn có thể add user trên mongodb bằng cách dùng robomongo cũng đc)

robomongo-view

6. Tắt và chạy lại server Mongodb với auth

Bây giờ chúng ta sẽ chạy lại server Mongodb với authentication để test

start-mongodb-with-auth

Mở tiếp 1 cmd thứ 2 để làm client kết nối vào server với Useradmin: SuperAdmin

login-with-super-admin

Bây giờ chúng ta tạo 1 database và tạo 1 collection để test quyền admin

loi-sai-roles

Vì chúng ta đã tạo 1 dbAdminAnyDatabase với database là admin mà chưa cấp cho nó dùng testadmin

Chúng ta sẽ tạo 1 user là SuperAdmin2 và role là root để test tất cả database nhé

create-collection-with-root

Như vậy là chúng ta đã tạo được database và collection abc cho testadmin rồi. Tiếp theo là test với quyền root và useradmin

error voi roles read khi createcollection

Nhưng với hàm find để view thì chạy được

find nhung khong co du lieu

Chúng ta mở tiếp 1 cmd khác để login với quyền userAdmin nhé

add user create

Ở đây khi thêm document thì lỗi thì chúng ta đang ở quyền userAdmin nhưng lại không cấp phát quyền readWrite nên không thế thêm dữ liệu được. Nhưng khi tạo một user để có quyền đọc khi thì lại được.

Giờ chúng ta sẽ login với user mới tạo để thêm document và view collection nhé

insert finish

Như các bạn đã thấy thì giờ chúng ta đã add được document với quyền createWrite rồi.

Roles rất quan trọng trong việc bảo mật nên trong MongoDB có đến 9 phân quyền Roles để quản lý. Tuy nhiên chỉ có root và thực hiện được tất cả các quyền còn nếu không cấp phát thì nó cũng không thực thi được.

Vì thế nên khi thực hiện Roles các bạn nên chú trọng việc bảo mật và cấp phát phân quyền cho đúng với User cần thiết.

Tạo user cấp phát quyền database MongodbtuanthanhvoMongoDBadd user mongodb,mongodb roles
Trong những bài thực hành trước đây mình chỉ dùng noauth để bỏ qua việc kết nối database với username password và việc phân quyền user vì các lý do: a. Dễ trong việc thực hành thêm xóa sửa. b. Các Tools UI như Robomongo chưa thể kết nối authentication vì mã...