用户权限
mongodb安装后,默认不需要用户登陆,可直接操作数据库,这是在真实生产中是非常危险的,可以通过使用为mongodb创建用户的方式来降低风险。
下面是mongodb中的常用权限:
权限名 | 描述 |
---|---|
read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数 |
userAdmin | 允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 |
cluterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |
root | 只在admin数据库中可用,超级账号,超级权限 |
创建用户
先进入mongodb命令行
#必须先进入admin库
use admin;
#创建一个用户
db.createUser({'user':'root','pwd':'root','roles':[{'role':'root','db':'admin'}],'customData':{'info':'first mongodb user'}});
查看已经创建的用户:
show users;
# 或者使用这条命令也能查询所创建的用户
db.system.users.find()
重启MongoDB开启认证
添加完用户后,如若想要使用用户操作,必须修改MongoDB配置再重启。
#关闭MongoDB服务
db.shutdownServer()
修改配置文件
vi /usr/local/mongo/conf/mongodb.conf
添加auth=true,然后重启mongodb
进入mongodb命令行,发现所示信息与之前没有开启auth的不一样了,信息少了很多。
认证:
use admin;
db.auth('root','root');
#返回1,登陆成功,返回0,登陆失败
修改用户
修改用户与创建用户语法类似
db.updateUser('guest',{'pwd':'123','roles':[{'role':'readAnyDatabase','db':'admin'}]});
修改用户密码:
db.changeUserPassword("guest","guest");
删除用户
db.dropUser('guest');