用户认证
MongoDB默认是开启用户认证的,修改配置文件的authorization
参数可以打开/关闭用户认证
创建管理员
> use admin
switched to db admin
> db.createUser({"user":"admin","pwd":"admin",roles:[{role:'userAdminAnyDatabase',db:'admin'}]})
# 此用户只有创建用户和赋权的权限,不能在别的表定入数据
创建普通用户
use admin
# 先用管理员登录
db.auth("admin","admin")
# 切换db,创建用户
use mydb
db.createUser({"user":"myuser","pwd":"mypwd",roles:[{role:'readWrite',db:'mydb'}]})
# 在哪个表创建的用户,就要在哪个表登录,比如说刚刚没有切换到mydb这个db,就只能在admin中登录
> use admin
switched to db admin
> db.createUser({"user":"myuser","pwd":"mypwd",roles:[{role:'readWrite',db:'mydb'}]})
Successfully added user: {
"user" : "myuser",
"roles" : [
{
"role" : "readWrite",
"db" : "mydb"
}
]
}
>
>
> use mydb
switched to db mydb
>
> db.auth("myuser","mypwd")
Error: Authentication failed.
0
> use admin
switched to db admin
> db.auth("myuser","mypwd")
1
# 查看当前db中的用户
>show uses
# 查看admin库中的用户
>db.system.users.find()
数据库角色
- 内建的角色
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
- 内部角色:__system
索引
索引的优点:
- 大大减少了服务器需要扫描的数据量;
- 索引可以帮助服务器避免排序或使用临时表;
- 索引可以将随机I/O转换顺序I/O;
创建索引
# 使用ensureIndex方法创建索引,key为创建索引的字段,1为升序创建索引,-1则是降序
>db.collection_name.ensureIndex({KEY:1})
# 复合索引
>db.col.ensureIndex({"title":1,"name":-1})
# 创建索引时,会引响数据写入时的性能,使用background参数让创建索引在后台执行
>db.col.ensureIndex({"title":1,"name":-1},{background:true})
# 分析查询语句是否使用索引
>db.col.find("name":"xxxooo").explain()