Quản lý người dùng trong MongoDB

Các phương thức quản lý người dùng trong MongoDB

Tên phương thức Mô tả
db.auth() Xác thực người dùng vào cơ sở dữ liệu
db.changeUserPassword() Thay đổi mật khẩu của người dùng hiện tại
db.createUser() Tạo người dùng mới
db.dropUser() Xóa một người dùng
db.dropAllUsers() Xóa tất cả người dùng được liên kết với cơ sở dữ liệu
db.getUser() Trả về thông tin về người dùng được chỉ định
db.getUsers() Trả về thông tin về tất cả người dùng được liên kết với cơ sở dữ liệu
db.grantRolesToUser() Cấp một vai trò và các đặc quyền của nó cho người dùng
db.removeUser() Không được chấp nhận. Xóa người dùng khỏi cơ sở dữ liệu
db.revokeRolesFromUser() Xóa vai trò khỏi người dùng
db.updateUser() Cập nhật dữ liệu người dùng
passwordPrompt() Lời nhắc mật khẩu thay thế cho việc chỉ định mật khẩu trực tiếp trong các phương pháp quản lý / xác thực người dùng mongosh khác nhau

Tạo tài khoản trong MongoDB

Tạo người dùng quản trị trong MongoDB được thực hiện bằng cách sử dụng phương thức db.createUser(). Với cú pháp như sau:

db.createUser(user, writeConcern)

Các tham số:

  • user: kiểu tài liệu (document). Tài liệu có xác thực và thông tin truy cập về người dùng để tạo.
  • writeConcern: kiểu tài liệu (document) Không bắt buộc. Mức độ quan tâm đối với việc sửa đổi. Tài liệu writeConcern nhận các trường giống như lệnh getLastError. 

Ví dụ sau đây cho thấy điều này có thể được thực hiện như thế nào.

db.createUser({
	user: "sinhnx",
	pwd: "your-password",

	roles: [{role: "userAdminAnyDatabase" , db:"admin"}]
})

các tham số:

  • user: Xác định tên người dùng
  • pwd: Xác định mật khẩu của người dùng
  • roles: Xác định vai trò của người dùng khi đăng nhập vào tài khoản (với các tham số userpwd ở trên)
    • userAdminAnyDatabase: cho phép người dùng có đặc quyền quản trị đối với tất cả cơ sở dữ liệu trong MongoDB
    • db: chỉ định cơ sở dữ liệu quản trị là cơ sở dữ liệu Meta đặc biệt bên trong MongoDB lưu giữ thông tin cho người dùng này

Để tạo một người dùng sẽ quản lý một cơ sở dữ liệu duy nhất, chúng ta có thể sử dụng lệnh tương tự như đã đề cập ở trên nhưng chúng ta chỉ cần sử dụng tùy chọn “userAdmin”.

db.createUser({
	user: "employee-admin",
	pwd: "password",

	roles:[{role: "userAdmin" , db:"employee"}]
})

Ví dụ sau sử dụng vai trò "read" chỉ cho phép truy cập chỉ đọc vào cơ sở dữ liệu và sau đó có vai trò "readWrite" cung cấp quyền truy cập có thể đọc và ghi vào cơ sở dữ liệu cho người dùng cụ thể

db.createUser({
	user: "sinhnx",
	pwd: "sinhnx.dev",

	roles:[ { role: "read" , db:"Marketing"},
            { role: "readWrite" , db:"Sales"}
	} ]
})

Bắt đầu từ phiên bản MongoDB 4.2 trở về sau thì có thể sử dụng thêm phương thức passwordPrompt() để nhập mật khẩu thay vì xác định trước mật khẩu ngay trong câu lệnh:

db.createUser({
    user:"sinhnx", 
    pwd:passwordPrompt(), 
    roles:[{role:"readWrite", db:"test"}]
})

Đổi mật khẩu người dùng

Sử dụng phương thức db.changeUserPassword() với cú pháp như sau:

db.changeUserPassword(username, password)

Các tham số:

  • username: Tên của người dùng có mật khẩu bạn muốn thay đổi
  • password: Mật khẩu của người dùng. Giá trị có thể là:
    • mật khẩu của người dùng trong chuỗi văn bản rõ ràng
    • phương thức passwordPrompt() để nhắc nhập mật khẩu của người dùng

Phân quyền cho người dùng

Sử dụng phương thức db.grantRolesToUser() với cú pháp như sau:

db.grantRolesToUser(username, roles, writeConcern)

Các tham số:

  • username: tên của người dùng được cấp quyền
  • roles: kiểu là một mảng tài liệu (document) xác định một loạt các quyền bổ sung để cấp cho người dùng
  • writeConcern: Không bắt buộc. Mức độ quan tâm đối với việc sửa đổi. Tài liệu writeConcern nhận các trường giống như lệnh getLastError. 
db.grantRolesToUser(
    "sinhnx", 
    ["read", {role:"read", db:"test"}]
)

Câu lệnh trên sẽ phân quyền cho người dùng "sinhnx" có quyền đọc ("read") cho cơ sở dữ liệu "test"

Xóa người dùng

Sử dụng phương thức db.dropUser()

db.dropUser(username, writeConcern)

trong đó

  • username: Tên người dùng sẽ bi∆ xóa từ cơ sở dữ liệu
  • writeConcern: Không bắt buộc. Xác định mức độ ghi đối với phương thức loại bỏ.

Ví dụ:

db.dropUser("sinhnx")