Tạo user và cấp phát quyền quản trị database trong Mongodb
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
1 2 3 |
c:\>mongodb\bin\mongod.exe -noauth c:\>mongodb\bin\mongod.exe -noauth --path "c:\folder_chua_db" |
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:
1 |
C:\Users\Admin>c:\mongodb\bin\mongo.exe |
Bây giờ chúng ta dùng lệnh
1 |
show dbs |
Để xem có bao nhiêu database
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
1 2 3 |
use admin db.createUser({ user: "SuperAdmin", pwd: "123456", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }) |
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
1 2 3 4 5 6 7 8 |
use testadmin db.createUser( { user: "dtmi", pwd: "987654", roles: [ { role: "userAdmin", db: "testadmin" } ] } ) |
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:
1 2 3 4 5 6 7 8 9 10 11 12 |
use testadmin db.createUser( { user: "dtmi", pwd: "987654", roles: [ { role: "userAdmin", db: "testadmin" } , { role: "role", db: "db" } , { role: "role", db: "db" } , ] } ) |
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
1 2 3 4 5 6 7 8 9 |
db.createUser( { user: "dtmitest", pwd: "987654", roles: [ { role: "read", db: "testadmin" } ] } ) |
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)
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
1 |
c:\mongodb\bin\mongod.exe -auth |
Mở tiếp 1 cmd thứ 2 để làm client kết nối vào server với Useradmin: SuperAdmin
1 |
c:\mongodb\bin\mongo.exe -u SuperAdmin -p 123456 localhost:27017/admin |
Bây giờ chúng ta tạo 1 database và tạo 1 collection để test quyền admin
1 |
db.createCollection("abc") |
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é
1 |
db.createUser({ user: "SuperAdmin2", pwd: "123456", roles: [ { role: "root", db: "admin" } ] }) |
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
1 2 3 4 5 |
c:\mongodb\bin\mongo.exe -u dtmitest -p 987654 localhost:27017/testadmin //và create Collection use testadmin db.createCollection("dtmi"); |
Nhưng với hàm find để view thì chạy được
Chúng ta mở tiếp 1 cmd khác để login với quyền userAdmin nhé
Ở đâ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é
1 |
c:\mongodb\bin\mongo.exe -u user1 -p 1234 localhost:27017/testadmin |
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.
https://www.dtmi.net/tao-user-va-cap-phat-quyen-quan-tri-database-trong-mongodb/Tạo user cấp phát quyền database MongodbMongoDBadd user mongodb,mongodb roles