发布于

MongoDB用户配置

Authors
  • avatar
    Name
    田中原
    Twitter

MongoDB用户配置

目录

当你的MongoDB数据库在本地使用时不需要账号密码没问题,但是当部署到服务器时是不能没有身份验证的。今天学习MongoDB用户配置,在此稍作记录。

MongoDB中的用户类型/user

常用MongDB的用户类型

  • 超级管理员:拥有最高权限,可以对任何数据库进行任意操作
  • 管理员用户:拥有当前数据库最高权限,可以对当前库进行任意操作
  • 数据库用户:只拥有对当前数据库数据的读写权利

MongoDB中的角色/权限/role

创建用户的时候需要指定用户的对于某个数据库是什么角色

可以理解为对某个数据库的权限设置

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限

用户相关的方法

#添加用户:
db.createUser({
  user: "<name>", //用户名
  pwd: "<cleartext password>",
  customData: { <any information> }, //可选的,备注信息。
  roles: [
    { role: "<role>", db: "<database>" } | "<role>", //指定角色
    ...
  ]},
  writeConcern: { <write concern> }
 )
#更改用户信息:将会覆盖掉原先的用户信息
root(
   "<username>",
   {
     customData : { <any information> },
     roles : [
               { role: "<role>", db: "<database>" } | "<role>",
               ...
             ],
     pwd: "<cleartext password>"
    },
    writeConcern: { <write concern> }
)

用户验证登陆的两种方式

注意点:验证的用户的时候,必须在该用户创建的数据库验证

mongod --auth
#开启验证
1 2mongod --auth #开启验证
1.连接数据库时验证

权限验证一定要在建立该账户的数据库上进行

mongo  xx.xx.xx.xx:xxx/test -u "admin" -p "adminPass"
2. 连接之后再进行验证
mongo --port 27017
use admin
db.auth("admin", "adminPass")

实践

1.创建超级管理员用户


sudo mongod --logpath=./log/log.log # 启动mongoDB

mongo
#进入mongo shell
use admin
#切换到admin数据库
db.system.users.find()
 #可以查看下admin下用户,默认应该是没有数据的
db.createUser({
  user:'admin',
  pwd:'adminPass',
  roles:['root']
})
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }


相关链接: MongoDB官网