在启用访问控制前,你需要在admin库中创建一个拥有 userAdmin 或者 userAdminAnyDatabase角色的超级管理员 这个用户可以管理user和roles,比如创建用户,授权或撤销某个用户的角色,以及创建和修改自定义角色
mongod --port 27017 --dbpath /var/lib/mongodb
mongo --port 27017
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: passwordPrompt(), // 这里也可以直接写你要设置的密码
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
创建用户所在数据库是用户的authentication database(认证数据库)。尽管用户将对此数据库进行身份验证,但该用户可以在其他数据库中拥有roles; 即用户的认证数据库不限制用户的权限
a. 关闭mongo实例 db.adminCommand( { shutdown: 1 } )
b. 退出 mongo shell
c. mongod --auth --port 27017 --dbpath /var/lib/mongodb
如果是你是用配置文件启动,你需要在配置文件中添加如下配置开启访问控制
security:
authorization: enabled
mongo --port 27017
# 切换到认证库
use admin
# 认证
db.auth(, )
就可以使用db.createUser()方法创建其他用户。你可以复制任意内置roles和用户自定义roles给创建的用户 举例如下:在test
数据库下创还能一个myTester用户。同时赋予对test库的readWrite角色和对reporting库的read角色
use test
db.createUser(
{
user: "myTester",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "reporting" } ]
}
)
mongo --port 27017 -u "myTester" --authenticationDatabase "test" -p
db.foo.insert( { x: 1, y: 1 } )
use admin
db.auth("root","xxx");
mongo -u root -p xxx --authenticationDatabase admin
vx:ashinstrong
Enable Access Control
Built-In Roles