Ngoài những gì @Camilo Silva đã đề cập, nếu bạn muốn cung cấp quyền truy cập miễn phí để tạo cơ sở dữ liệu, đọc, viết cơ sở dữ liệu, v.v., nhưng bạn không muốn tạo vai trò gốc, bạn có thể thay đổi bước thứ 3 với mục sau:
use admin db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] } )Nếu bạn đã tạo người dùng, bạn có thể cập nhật người dùng như sau:
Đăng nhập đầu tiên:
mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin"Các quyền thêm:
use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] )Người dùng xác thực với MongoDB bằng cơ chế xác thực bên ngoài, chẳng hạn như Kerberos, phải được tạo trong cơ sở dữ liệu db.foo.insertOne( { x: 1, y: 1 } ) db.foo.insertOne( { x: 1, y: 1 } ) db.foo.insertOne( { x: 1, y: 1 } )
Để sử dụng các phiên khách hàng và đảm bảo tính nhất quán nhân quả với người dùng xác thực
db.foo.insertOne( { x: 1, y: 1 } )
2 (người dùng Kerberos, LDAP hoặc X.509), tên người dùng không thể lớn hơn 10k byte.- Đối với xác thực Kerberos, bạn phải thêm Hiệu trưởng Kerberos làm tên người dùng. Bạn không cần chỉ định mật khẩu.
- Hoạt động sau đây bổ sung hiệu trưởng Kerberos
db.foo.insertOne( { x: 1, y: 1 } )
6 với quyền truy cập chỉ đọc vào cơ sở dữ liệudb.foo.insertOne( { x: 1, y: 1 } )
7: - Người dùng xác thực với MongoDB bằng cơ chế xác thực bên ngoài, chẳng hạn như LDAP, phải được tạo trong cơ sở dữ liệu
db.foo.insertOne( { x: 1, y: 1 } )
2, cho phépdb.foo.insertOne( { x: 1, y: 1 } )
3 hoặcdb.foo.insertOne( { x: 1, y: 1 } )
4 tham khảo ý kiến của một nguồn bên ngoài để xác thực. - Để xác thực LDAP, bạn phải chỉ định tên người dùng. Bạn không cần chỉ định mật khẩu, vì điều đó được xử lý bởi dịch vụ LDAP.
- Hoạt động sau đây thêm người dùng use admin
db.grantRolesToUser(
"myUserAdmin",
[ { role: "userAdminAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" } ]
)
3 có quyền truy cập chỉ đọc vào cơ sở dữ liệu
db.foo.insertOne( { x: 1, y: 1 } )
7: - Người dùng xác thực với MongoDB bằng cơ chế xác thực bên ngoài, chẳng hạn như xác thực chứng chỉ máy khách X.509, phải được tạo trong cơ sở dữ liệu
db.foo.insertOne( { x: 1, y: 1 } )
2, cho phépdb.foo.insertOne( { x: 1, y: 1 } )
3 hoặcdb.foo.insertOne( { x: 1, y: 1 } )
4 tham khảo nguồn bên ngoài để xác thực. - Đối với xác thực chứng chỉ máy khách X.509, bạn phải thêm giá trị của
8 từ chứng chỉ máy khách làm người dùng MongoDB. Mỗi chứng chỉ máy khách X.509 duy nhất tương ứng với một người dùng MongoDB duy nhất. Bạn không cần chỉ định mật khẩu.use reporting db.createUser( { user: "reportsUser", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" }, { role: "readWrite", db: "accounts" } ] } ) - Hoạt động sau đây bổ sung người dùng chứng chỉ máy khách
9 có quyền truy cập chỉ đọc vào cơ sở dữ liệuuse reporting db.createUser( { user: "reportsUser", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" }, { role: "readWrite", db: "accounts" } ] } ) db.foo.insertOne( { x: 1, y: 1 } )
7. - Để quản lý người dùng, gán vai trò và tạo vai trò tùy chỉnh, xem Quản lý người dùng và vai trò.
- Tài liệu về nhà → Hướng dẫn sử dụng MongoDB
- Trên trang này
- Điều kiện tiên quyết
Thủ tục
Kết nối và xác thực
Để có thể tạo người dùng, bạn cần phải:
Bật điều khiển truy cập
Tạo quản trị viên người dùng
Đối với việc tạo người dùng thường xuyên, bạn phải có các quyền sau:
Để tạo người dùng mới trong cơ sở dữ liệu, bạn phải có mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 1Action trên tài nguyên cơ sở dữ liệu đó.
Để cấp vai trò cho người dùng, bạn phải có hành động mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 2 trên cơ sở dữ liệu của vai trò.
Vai trò tích hợp mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 3 và mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 4 cung cấp các hành động mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 1 và mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 2 trên các tài nguyên tương ứng của chúng.
Ghi chú
Quy trình sau sử dụng xác thực Scram. Để biết thêm thông tin về các cơ chế xác thực khác, hãy xem các ví dụ bổ sung.Additional Examples.
Quy trình sau sử dụng xác thực Scram. Để biết thêm thông tin về các cơ chế xác thực khác, hãy xem các ví dụ bổ sung.Additional Examples. Bước sau sử dụng xác thực Scram. Để biết thêm thông tin về các cơ chế xác thực khác, hãy xem các ví dụ bổ sung. Sau khi xác thực làm quản trị viên người dùng, hãy sử dụng phương thức mongo --port 27017 -u "myUserAdmin" -p "abc123" \
--authenticationDatabase "admin"
7 để tạo thêm người dùng. Bạn có thể gán bất kỳ vai trò tích hợp hoặc vai trò do người dùng xác định cho người dùng.Ghi chú
use test db.createUser( { user: "myTester", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "readWrite", db: "test" }, { role: "read", db: "reporting" } ] } )
Hoạt động sau đây thêm người dùng myTester vào cơ sở dữ liệu mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9, người có vai trò use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 0 trong cơ sở dữ liệu mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9 cũng như vai trò use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 2 trong cơ sở dữ liệu use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 3.
Mẹo
Phương thức use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 4 nhắc bạn nhập mật khẩu. Bạn cũng có thể chỉ định mật khẩu của mình trực tiếp dưới dạng chuỗi. Chúng tôi khuyên bạn nên sử dụng phương thức use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 4 để tránh hiển thị mật khẩu trên màn hình của bạn và có khả năng rò rỉ mật khẩu vào lịch sử shell của bạn.
Cơ sở dữ liệu nơi bạn tạo người dùng (trong ví dụ này, mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9) là cơ sở dữ liệu xác thực của người dùng. Mặc dù người dùng xác thực vào cơ sở dữ liệu này, người dùng có thể có vai trò trong các cơ sở dữ liệu khác. Cơ sở dữ liệu xác thực của người dùng không giới hạn các đặc quyền của người dùng.use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 7
Sau khi tạo người dùng bổ sung, thoát use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 7
Quan trọnguse admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 7 session. Authenticating as a different user means the session has the privileges of both authenticated users. To switch between users exit and relaunch use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 7
Không thể chuyển đổi giữa người dùng trong cùng một phiên use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 7. Xác thực như một người dùng khác có nghĩa là phiên có đặc quyền của cả hai người dùng được xác thực. Để chuyển đổi giữa người dùng thoát và khởi chạy lại use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 7use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 7 as
use test |
db.createUser( |
{ |
user: "myTester", |
pwd: passwordPrompt(), // or cleartext password |
roles: [ { role: "readWrite", db: "test" }, |
{ role: "read", db: "reporting" } ] |
} |
) |
Sau khi thoát use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 7 dưới dạng
use test |
db.createUser( |
{ |
user: "myTester", |
pwd: passwordPrompt(), // or cleartext password |
roles: [ { role: "readWrite", db: "test" }, |
{ role: "read", db: "reporting" } ] |
} |
) |
db.foo.insertOne( { x: 1, y: 1 } )
Hoạt động sau đây thêm người dùng myTester vào cơ sở dữ liệu mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9, người có vai trò use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 0 trong cơ sở dữ liệu mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9 cũng như vai trò use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 2 trong cơ sở dữ liệu use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 3.
Mẹo
Phương thức use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 4 nhắc bạn nhập mật khẩu. Bạn cũng có thể chỉ định mật khẩu của mình trực tiếp dưới dạng chuỗi. Chúng tôi khuyên bạn nên sử dụng phương thức use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 4 để tránh hiển thị mật khẩu trên màn hình của bạn và có khả năng rò rỉ mật khẩu vào lịch sử shell của bạn.
Hoạt động sau đây thêm người dùng myTester vào cơ sở dữ liệu mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9, người có vai trò use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 0 trong cơ sở dữ liệu mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9 cũng như vai trò use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 2 trong cơ sở dữ liệu use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 3.
Mẹo
use reporting |
db.createUser( |
{ |
user: "reportsUser", |
pwd: passwordPrompt(), // or cleartext password |
roles: [ |
{ role: "read", db: "reporting" }, |
{ role: "read", db: "products" }, |
{ role: "read", db: "sales" }, |
{ role: "readWrite", db: "accounts" } |
] |
} |
) |
Phương thức use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 4 nhắc bạn nhập mật khẩu. Bạn cũng có thể chỉ định mật khẩu của mình trực tiếp dưới dạng chuỗi. Chúng tôi khuyên bạn nên sử dụng phương thức use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 4 để tránh hiển thị mật khẩu trên màn hình của bạn và có khả năng rò rỉ mật khẩu vào lịch sử shell của bạn.
Cơ sở dữ liệu nơi bạn tạo người dùng (trong ví dụ này, mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9) là cơ sở dữ liệu xác thực của người dùng. Mặc dù người dùng xác thực vào cơ sở dữ liệu này, người dùng có thể có vai trò trong các cơ sở dữ liệu khác. Cơ sở dữ liệu xác thực của người dùng không giới hạn các đặc quyền của người dùng.
Sau khi tạo người dùng bổ sung, thoát use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 7
Quan trọng
use $external |
db.createUser( |
{ |
user: "", |
roles: [ |
{ role: "read", db: "records" } |
] |
} |
) |
Hoạt động sau đây thêm người dùng myTester vào cơ sở dữ liệu mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9, người có vai trò use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 0 trong cơ sở dữ liệu mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9 cũng như vai trò use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 2 trong cơ sở dữ liệu use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 3.
Mẹo
Phương thức use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 4 nhắc bạn nhập mật khẩu. Bạn cũng có thể chỉ định mật khẩu của mình trực tiếp dưới dạng chuỗi. Chúng tôi khuyên bạn nên sử dụng phương thức use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 4 để tránh hiển thị mật khẩu trên màn hình của bạn và có khả năng rò rỉ mật khẩu vào lịch sử shell của bạn.
Cơ sở dữ liệu nơi bạn tạo người dùng (trong ví dụ này, mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9) là cơ sở dữ liệu xác thực của người dùng. Mặc dù người dùng xác thực vào cơ sở dữ liệu này, người dùng có thể có vai trò trong các cơ sở dữ liệu khác. Cơ sở dữ liệu xác thực của người dùng không giới hạn các đặc quyền của người dùng.
Sau khi tạo người dùng bổ sung, thoát use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 7
Quan trọng
use $external |
db.createUser( |
{ |
user: "reporting", |
roles: [ |
{ role: "read", db: "records" } |
] |
} |
) |
Hoạt động sau đây thêm người dùng myTester vào cơ sở dữ liệu mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9, người có vai trò use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 0 trong cơ sở dữ liệu mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9 cũng như vai trò use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 2 trong cơ sở dữ liệu use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 3.
Mẹo
Phương thức use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 4 nhắc bạn nhập mật khẩu. Bạn cũng có thể chỉ định mật khẩu của mình trực tiếp dưới dạng chuỗi. Chúng tôi khuyên bạn nên sử dụng phương thức use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 4 để tránh hiển thị mật khẩu trên màn hình của bạn và có khả năng rò rỉ mật khẩu vào lịch sử shell của bạn.
Cơ sở dữ liệu nơi bạn tạo người dùng (trong ví dụ này, mongo --port 27017 -u "myUserAdmin" -p "abc123" \ --authenticationDatabase "admin" 9) là cơ sở dữ liệu xác thực của người dùng. Mặc dù người dùng xác thực vào cơ sở dữ liệu này, người dùng có thể có vai trò trong các cơ sở dữ liệu khác. Cơ sở dữ liệu xác thực của người dùng không giới hạn các đặc quyền của người dùng.
Sau khi tạo người dùng bổ sung, thoát use admin db.grantRolesToUser( "myUserAdmin", [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] ) 7
Hoạt động sau đây bổ sung người dùng chứng chỉ máy khách
use reporting |
db.createUser( |
{ |
user: "reportsUser", |
pwd: passwordPrompt(), // or cleartext password |
roles: [ |
{ role: "read", db: "reporting" }, |
{ role: "read", db: "products" }, |
{ role: "read", db: "sales" }, |
{ role: "readWrite", db: "accounts" } |
] |
} |
) |
db.foo.insertOne( { x: 1, y: 1 } )
7.use $external |
db.createUser( |
{ |
user: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry", |
roles: [ |
{ role: "read", db: "records" } |
] |
} |
) |
Mẹo
Xem thêm:
Để quản lý người dùng, gán vai trò và tạo vai trò tùy chỉnh, xem Quản lý người dùng và vai trò.