mongodb登陆认证

2020-02-17linuxmongodb

判断服务端是否开启认证

输入命令mongo,如果服务端开启认证,就会显示为

开启认证

服务端没有开启认证,就会有一个WARNING

没有开启认证

新建一个全局管理员

新建一个mongodb全局管理员,用于管理所有数据库中的用户和角色

db.createUser({
   user:"admin",
   pwd:"123456",
   roles:["userAdminAnyDatabase"]
 })

其中用户名是root,密码是123456,角色是userAdminAnyDatabase。

如果创建成功,就会返回

Successfully added user: { "user" : "admin", "roles" : [ "userAdminAnyDatabase" ] }

开启mongodb认证

默认情况下,没有启用mongodb的认证功能,是以匿名的方式登陆mongodb服务器。

先删除当前的docker容器

docker container stop mongodb
docker container rm mongodb

然后启用具有认证功能的mongodb容器。

docker run --name mongo -p 27017:27017 -v /data/mongodb/:/data/db -v /etc/localtime:/etc/localtime -d mongo mongod --auth

登陆mongod服务器

mongo

输入用户名和密码

db.auth("root","123456")

如果登陆成功,就会返回

1

读写数据库

不过当前用户是没有读写数据的权限的,想要读写指定数据库中的集合数据,需要新建一个用户

切换数据库,比如test

use test

新建用户

db.createUser({
   user:"admin",
   pwd:"123456",
   roles:["readWrite"]})

这样这个用户就能读取指定数据库test的集合数据了

权限和角色表

角色备注
read允许用户读指定数据库
readWrite允许用户读写指定数据库
dbAdmin允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计
userAdmin可以在指定数据库里创建、删除和管理用户

自定义权限的角色

mongodb默认角色和权限管理,不是非常自由。不过可以自定义角色和权限管理。

创建只能读取test.accounts集合和web.log集合的用户

  • 创建自定义角色
db.createRole({
   role:"readTestAccounts",
   privileges:[{
     resource:{db:"test",collection:"accounts", action:["find"]}
     resource:{db:"log",collection:"accounts", action:["find"]}
   }],
     roles:[]}]
  • 创建用户
db.createUser({
   user:"readtest",
   pwd:"123456",
   roles:["readTestAccounts"]})

查看创建的用户

use admin
show users
db.system.users.find()
db.runCommand({usersInfo:"user"})

修改用户密码和删除用户

  • 修改用户密码
use admin
db.changeUserPassword("user", "pwd")
  • 删除用户
use admin
db.dropUser('user')
Last Updated 8/21/2026, 3:57:15 AM