如果我们是数据库的管理者(DBA),除了了解数据库的基本操作外,我们还需要了解
数据库的其它知识,比如:复制级/数据分片/添加用户/导入导出等。
我们接下来首先来了解mongodb的用户管理。
我们一开始学习的时候,登录mongodb是这样的:
没有输入用户名和密码,这是因为mongodb一开始没有为我们
设置用户名和密码。
如果这台服务器上线了,需要用户名和密码来保障它的安全,我们应该如何
操作呢?这时候就需要mongodb的用户管理。
注意:
A)在mongodb中,有一个admin数据库,牵涉到服务器配置层面的操作,需要先
切换到admin数据,即use admin(相当于进入超级用户管理模式)
B)mongo的用户是以数据库未单位来建立的,每个数据库都有自己的管理员。
C)我们在设置用户时,需要现在admin数据库下建立管理员,这个管理员登录
后相当于超级管理员。
1: 添加用户
3.0之前命令:db.addUser();
3.0之后命令:db.createUser(
{
user:'xxx',
pwd:'xxx',
roles:["xxx","xxx"]
}
)
3.0之前简单参数: db.addUser(用户名,密码,是否只读)
3.0之后简单参数: db.createUser({用户名:值1,密码:值2,角色:[读/写,角色名]})
例:
3.0之前:
3.0之后:
其中dbAdmin是一种角色,其它角色见下表:
具体角色:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
重启服务:
重新进入服务之后,就需要登录了:
注意: 添加用户后,我们再次退出并登录,发现依然可以直接读数据库?
原因: mongodb服务器启动时, 默认不是需要认证的.
要让用户生效, 需要启动服务器时,就指定 --auth 选项.
这样, 操作时,就需要认证了.
在admin库中加的管理员,在其它库中都有权限,而在其他库添加
的用户的权限是不能跨库的。
2: 认证(用户登录)
命令:db.auth();
简单参数:db.auth(用户名,密码);
例:
3: 修改用户密码
命令:db.changeUserPassword();
简单参数:db.changeUserPassword(用户名, 新密码);
例:
3:删除用户
命令:db.removeUser();
简单参数:db.removeUser(用户名);
例: