首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MongoDB-配置管理员认证及普通认证

MongoDB-配置管理员认证及普通认证

作者头像
运维小路
发布2026-01-26 12:49:24
发布2026-01-26 12:49:24
690
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL

PostgreSQL

MongoDB(本章节)

Redis

Etcd

上个小节我们介绍了MongoDB的的用户角色及权限,本小节就介绍如何开启认证,并配置一个真实需求:1.一个普通用户有某个特定库库的增删查改权限,2.一个只读用户只能访问某特定库,3.自定义角色权限。

一.配置超级管理员

1.创建超级管理员

代码语言:javascript
复制
test> use admin
switched to db admin
admin> db.createUser({
...   user: "superuser",
...   pwd: "your_secure_password",
...   roles: [ { role: "root", db: "admin" } ]
... })
{ ok: 1 }
admin> 

这里创建了一个用户名为"superuser",密码为"your_secure_password"的用户,并赋予了root角色。root角色是超级用户角色,拥有所有数据库的全部权限。先创建超级管理员,再启用认证。

2.启用认证

代码语言:javascript
复制
vi /etc/mongod.conf
security:
  authorization: enabled

3.重启服务

代码语言:javascript
复制
systemctl restart mongod

4.检查认证是否生效

即便启用了认证,我们也可以直接使用mongosh以无认证进入数据库,但是操作权限受限。

代码语言:javascript
复制
test> use admin
switched to db admin
admin>  db.getUsers()
MongoServerError[Unauthorized]: Command usersInfo requires authentication
admin> 

5.启用认证

当我们以mongosh连接到数据库以后,再启用认证(类似Redis-cli认证)。

代码语言:javascript
复制
admin> db.auth("superuser", "your_secure_password")
{ ok: 1 }
admin>  db.getUsers()
{
  users: [
    {
      _id: 'admin.superuser',
      userId: UUID('1f2c6f8f-407c-4b5c-b036-d54af744f729'),
      user: 'superuser',
      db: 'admin',
      roles: [ { role: 'root', db: 'admin' } ],
      mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
    }
  ],
  ok: 1
}
admin> 

6.登录及认证

在mongosh连接的时候指定账号及密码及数据库。

代码语言:javascript
复制
 mongosh -u "superuser" \
         -p "your_secure_password" \
         --authenticationDatabase admin

二.配置特定用户

为这个特定库:abcd,创建2个账号,一个拥有增删改查,一个拥有只读权限。

代码语言:javascript
复制
admin> show dbs
abcd     40.00 KiB
admin   132.00 KiB
config  108.00 KiB
local    72.00 KiB
test     40.00 KiB

1.创建增删改查账号

代码语言:javascript
复制
admin> use admin
already on db admin
admin> db.createUser({
...   user: "abcd_rw",
...   pwd: "password",
...   roles: [ { role: "readWrite", db: "abcd" } ]
... })
{ ok: 1 }
admin> 

2.创建只读账号

代码语言:javascript
复制
use admin

db.createUser({
  user: "abcd_ro",           // 只读账号用户名  
  pwd: "ROpassword456!",      // 只读账号密码
  roles: [
    { role: "read", db: "abcd" }       // 授予 myapp 数据库的只读权限
  ]
})

3.测试只读权限

这里的可选的role,就是我们上个小节提到的哪些角色,后面的库还可以更精细到集合。

代码语言:javascript
复制
 mongosh -u "abcd_ro" \
         -p 'ROpassword456!' \
         --authenticationDatabase admin

注意:我们创建的账号的时候,在哪个库里面创建账号,则认证的时候就必须使用对应的库,才能认证成功(这里和对应的权限无关)。

比如我们在admin库创建的用户:abcd_ro就认证的时候就必须使用admin库才能认证成功。

三.创建自定义角色

代码语言:javascript
复制
use myapp

// 创建自定义角色
db.createRole({
  role: "customReadWrite",
  privileges: [
    {
      resource: { db: "myapp", collection: "users" },  // 只针对 users 集合
      actions: [ "find", "insert", "update", "remove" ]
    },
    {
      resource: { db: "myapp", collection: "orders" }, // 只针对 orders 集合
      actions: [ "find", "insert", "update", "remove" ]
    }
  ],
  roles: []
})

// 创建使用自定义角色的用户
db.createUser({
  user: "limited_rw",
  pwd: "LimitedPass123!",
  roles: [ { role: "customReadWrite", db: "myapp" } ]
})
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB(本章节)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档