MongoDB数据库设置用户密码

创建一个数据库新用户用db.createUser()方法,如果用户存在则返回一个用户重复错误。


用法

1.  db.createUser(user, writeConcern)
  • user:这个文档创建关于用户的身份认证和访问信息;
  • writeConcern:这个文档描述保证MongoDB提供写操作的成功报告。

user文档

user文档,定义了用户的以下形式:

use products
 db.createUser( { "user" : "accountAdmin01",
                "pwd": "cleartext password",
                "customData" : { employeeId: 12345 },
                 "roles" : [ { role: "clusterAdmin", db: "admin" },
                           { role: "readAnyDatabase", db: "admin" },
                            "readWrite"
                             ] },
                { w: "majority" , wtimeout: 5000 } )

user文档字段介绍:

  • user字段,为新用户的名字;
  • pwd字段,用户的密码;
  • cusomData字段,为任意内容,例如可以为用户全名介绍;
  • roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色;

在roles字段,可以指定内置角色和用户定义的角色。

MongoDB内置角色有如下:

  1. 数据库用户角色:read、readWrite;

  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;

  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

  4. 备份恢复角色:backup、restore;

  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

  6. 超级用户角色:root

    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)

  7. 内部角色:__system

你可以点击这里查看每个角色所拥有的操作权限。

writeConcern文档

  • w选项:允许的值分别是 1、0、大于1的值、"majority"、<tag set>;
  • j选项:确保mongod实例写数据到磁盘上的journal(日志),这可以确保mongd以外关闭不会丢失数据。设置true启用。
  • wtimeout:指定一个时间限制,以毫秒为单位。wtimeout只适用于w值大于1。

示例

例如:在products数据库创建用户accountAdmin01,并给该用户admin数据库上clusterAdmin和readAnyDatabase的角色,products数据库上readWrite角色。

   use products
   db.createUser(  {  "user"  :  "accountAdmin01",
  "pwd":  "cleartext password",
   "customData"  :  { employeeId:  12345  },
  "roles"  :  [  { role:  "clusterAdmin", db:  "admin"  },
  { role:  "readAnyDatabase", db:  "admin"  },
   "readWrite"
  ]  },
   { w:  "majority"  , wtimeout:  5000  }  )

验证:

1.  mongo -u accountAdmin01 -p yourpassward --authenticationDatabase products
  1. MongoDB 版本 v4.0.5
  2. 系统 Win10

超级管理员

设置 admin

use admin  
db.createUser({
  user: 'admin',  // 用户名
  pwd: '123456',  // 密码
  roles:[{
    role: 'root',  // 角色
    db: 'admin'  // 数据库
  }]
})

设置完成,可以输入 show users 查看是否设置成功。

开启验证

找到 MongoDB 安装目录,打开 mongod.cfg文件,找到以下这句:

#security:

修改为:

security:
  authorization: enabled

重启 MongoDB

打开任务管理器

image

找到 MongoDB 服务,右键重新启动。

这时,我们可以打开 powershell 连接数据库:

输入 mongo:

image

显示连接成功,但是当我们输入其他指令时,会提示没有权限:

image

登录数据库

// 方式一
mongo
use admin
db.auth('admin', '123456')

// 方式二
mongo admin -u admin -p 123456

这时候我们就可以正常访问和操作数据了。

添加数据库用户

我们除了可以设置数据库的超级管理员以外,还可以给每个数据库设置单独的管理员。其只有操作单独数据的一定权限。

use test  // 跳转到需要添加用户的数据库
db.createUser({
  user: 'fooadmin',  // 用户名
  pwd: '123456',  // 密码
  roles:[{
    role: 'readWrite',  // 角色
    db: 'test'  // 数据库名
  }]
})

常用命令

show users  // 查看当前库下的用户

db.dropUser('testadmin')  // 删除用户

db.updateUser('admin', {pwd: '654321'})  // 修改用户密码

db.auth('admin', '654321')  // 密码认证

MongoDB 数据库默认角色

  1. 数据库用户角色:read、readWrite
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
  4. 备份恢复角色:backup、restore
  5. 所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
    dbAdminAnyDatabase
  6. 超级用户角色:root

更多细节参考官方文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容