Mặc định, các bạn có thể start để sử dụng MongoDB server mà không cần phải đăng nhập với bất kỳ user nào như mình đã làm trong bài viết Cài đặt MongoDB trên macOS. Nhưng trong một số trường hợp như môi trường production chẳng hạn, việc thao tác với MongoDB server sử dụng user sẽ tốt hơn rất nhiều. Khi đó, các bạn cần start MongoDB server với tham số “–auth” và sử dụng user để đăng nhập vào MongoDB server này. Trong bài viết này, mình sẽ hướng dẫn các bạn cách tạo mới và cấp quyền truy cập cho MongoDB user để sử dụng các bạn nhé!
Đầu tiên, các bạn hãy start MongoDB server như bình thường, của mình như sau:
1 |
./mongod --dbpath=/Users/Khanh/MongoDB/data/db |
Sau đó, sử dụng tập tin mongo của MongoDB để đăng nhập vào server này như sau:
1 |
./mongo |
Để tạo mới một MongoDB user, chúng ta cần chọn database mà user này sẽ sử dụng trước. Ví dụ ở đây mình chọn database admin của MongoDB như sau:
Sau đó, chúng ta sẽ sử dụng phương thức createUser() của MongoDB để thêm vào database này một user như sau:
1 2 3 4 5 6 |
db.createUser({ user: "<username>", pwd: "<password>", roles: [{ role: "<role1>", db: "<db1>" }, { role: "<role2>", db: "<db2>" },...] }) |
Trong đó:
- <username> là tên user mà các bạn muốn thêm.
- <password> là mật khẩu của user này.
- <role1>, <role2> là khai báo role của user này đối với database mà nó được gán. Chúng ta có những role mặc định của MongoDB https://docs.mongodb.com/manual/reference/built-in-roles/ và những role do chúng ta tạo ra.
- <db1>, <db2>: mặc dù chúng ta đã khai báo sử dụng một database (trong ví dụ của mình là database “admin”), nhưng user này cũng có thể được sử dụng trong những database khác luôn, với role được chỉ định trong câu lệnh này các bạn nhé!
Trong ví dụ này, mình sẽ thực thi phương thức createUser() với nội dung như sau:
1 2 3 4 5 |
db.createUser({ user: "khanh", pwd: "abc123", roles: [{ role: "root", db: "admin" }] }) |
Như các bạn thấy, trong câu lệnh trên, mình đã thêm một user với tên là “Khanh” và mật khẩu là “abc123”. User này chỉ sử dụng được với database admin với role Superuser “root” https://docs.mongodb.com/manual/reference/built-in-roles/#superuser-roles.
Kết quả:
OK, bây giờ chúng ta có thể sử dụng user mới này để đăng nhập vào MongoDB server rồi đó các bạn.
Mình sẽ restart lại MongoDB với tham số “–auth” như sau:
1 |
./mongod --auth --dbpath=/Users/Khanh/MongoDB/data/db |
Khi đó, nếu mình không đăng nhập vào MongoDB với một user mà thao tác trên database admin, thì lỗi sau sẽ xuất hiện:
Giờ mình sẽ đăng nhập vào MongoDB server với user mà mình đã tạo ở trên với câu lệnh có cấu trúc như sau:
1 |
./mongo -u <username> -p <password> --authenticationDatabase <database> |
Trong đó:
- <username> là tên đăng nhập
- <password> là mật khẩu của user
- <database> là tên database mà user đã được gán.
Của mình như sau;
1 |
./mongo -u "khanh" -p "abc123" --authenticationDatabase "admin" |
Khi đó, mình có thể thao tác với database admin mà không có vấn đề gì cả: