1.MongoDB初始环境下是无用户无认证的
直接使用"mongo"客户端,不带任何参数就能登录并随意访问控制任何数据库。
2. 怎么开启用户认证?
开启认证前,首先得添加管理员用户。
为啥?一旦开启了认证,连一个用户都没有,没法登录
3. 怎样添加管理员用户
我们需要添加两种角色的管理员
- 用户管理员:负责增删改用户。(只管用户,不管数据)
- 数据库管理员:拥有任何数据库的读写权限 (只管数据,不管用户)
(1) 添加“用户管理员”
use admin
db.createUser(
{
user: "useradmin",
pwd: "useradmin",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
(2)添加"数据库管理员"
use admin
db.createUser(
{
user: "dbadmin",
pwd: "dbadmin",
roles: [
{ role : "dbAdminAnyDatabase", db : "admin"},
{ role : "readWriteAnyDatabase", db : "admin"},
{ role : "clusterAdmin", db : "admin"}
]
}
)
注:MongoDB 2.6 版本新增加了一种管理员角色: “root”
这是一个超级管理员角色,涵盖以下角色:readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase, clusterAdmin, restore, and backup
因而也可以直接添加"root"角色管理员,以替代上文的两个角色管理员。
添加"root"角色管理员命令示例:
use admin
db.createUser(
{
user: "root",
pwd: "root",
roles: [{role : "root", db : "admin"}]
}
)
4.开启MongoDB认证
(1) 在mongod的启动配置文件中加入:“auth = true”
(2) 重启mongodb生效
5. 启用认证后的登录
mongo -u useradmin -p useradmin 127.0.0.1/admin
注意:每一个用户都从属于某个数据库,必须在所属的数据库下认证才会成功。
比如上文中我们添加的"useradmin"用户是属于"admin"数据库,如果用"test"数据库认证就会失败
6. 添加普通用户
上文说过,"用户管理员”只管用户,不管数据。
我们通过"用户管理员"登录后,创建一个普通用户:“mydb1_user1”,
用于读写"mydb1"数据库
use mydb1
db.createUser(
{
user : "mydb1_user1",
pwd : "mydb1_user1",
roles : [
{role : "readWrite", db : "mydb1"}
]
}
)
7. 查看当前数据库下有哪些用户
show users
8. 查看所有用户
use admin
db.system.users.find()
9. 删除用户
db.dropUser('mydb1_user1')
10.修改用户密码
db.changeUserPassword('root','password123');
11. 其他
(1) 创建一个用户,既可以读写"mydb1",又可以读写"mydb2"
use mydb1
db.createUser(
{
user : "mydb1_user2",
pwd : "mydb1_user2",
roles : [
{role : "readWrite", db : "mydb1"},
{role : "readWrite", db : "mydb2"}
]
}
)