资讯专栏INFORMATION COLUMN

mongodb账户授权管理

paney129 / 2356人阅读

摘要:最近出现了较多的权限事故,远的有国外的信用卡信息泄露,近的有国内用户人脸识别数据库被脱裤,原因都是使用了未加权限管理的数据库,导致在公网可以直接通过加端口的方式访问。

最近mongodb出现了较多的权限事故,远的有国外的信用卡信息泄露,近的有国内用户人脸识别数据库被脱裤,原因都是使用了未加权限管理的mongodb数据库,导致在公网可以直接通过ip加端口的方式访问。最近我们新开的一个项目也是用了mongodb,为了避免自己成为背锅侠,我也不得已实践一遍mongodb的用户权限管理。

要想对db授权, 首先要搞清楚mongodb的角色种类:

Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

mongodb给用户授权有两种方式
1.在添加用户的时候授权

use order;
db.createUser(
   {
     user: "devweb-test3",
     pwd: "mmt-devweb",
     roles: [ { role: "dbAdmin", db: "order" },{ role: "readWrite", db: "order" }   ]
   }
);

2.创建用户后给用户添加权限

use order;
db.grantRolesToUser( "devweb-test3" , [ { role: "dbOwner", db: "order" } ])

删除用户

use order;
db.dropUser("devweb-test3");

回收用户权限

use order;
db.revokeRolesFromUser( "devweb-test3" , [ { role: "readWrite", db: "order" } ])

以上是我实践中成功的案例,下面是实践中踩到的一些坑

授权必须在被授权的db中进行,否则授权无效(我的mongo版本是4.0.7)

use admin;
switched to db admin
> db.createUser(
...    {
...      user: "devweb-test3",
...      pwd: "mmt-devweb",
...      roles: [ { role: "dbAdmin", db: "order" },{ role: "readWrite", db: "order" }   ]
...    }
... );
Successfully added user: {
    "user" : "devweb-test3",
    "roles" : [
        {
            "role" : "dbAdmin",
            "db" : "order"
        },
        {
            "role" : "readWrite",
            "db" : "order"
        }
    ]
}

然后在另外一个终端登录进行认证

db.logout();
{ "ok" : 1 }
> db.auth("devweb-test3","mmt-devweb");
Error: Authentication failed.

2.仅仅给用户添加adAdmin角色仍然无法访问db,还需要readWrite角色

db.createUser(
...    {
...      user: "devweb-test",
...      pwd: "mmt-devweb",
...      roles: [ { role: "dbAdmin", db: "order" }  ]
...    }
... );
Successfully added user: {
    "user" : "devweb-test",
    "roles" : [
        {
            "role" : "dbAdmin",
            "db" : "order"
        }
    ]
}

在另外一个终端进行登录授权

db.auth("devweb-test","mmt-devweb");
1
> show collections;
financialAssetFlow
productDetail
productList
> db.financialAssetFlow.find().pretty();
Error: error: {
    "ok" : 0,
    "errmsg" : "not authorized on order to execute command { find: "financialAssetFlow", filter: {}, lsid: { id: UUID("676a5042-0c80-4b79-9e8a-d91b63e80199") }, $db: "order" }",
    "code" : 13,
    "codeName" : "Unauthorized"
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19507.html

相关文章

  • mongoDB初阶系列一:用户和权限

    摘要:本文将重点介绍的用户和权限这一部分。结果返回,表示管理员登录成功。接下来,用这个管理员给数据库创建一个普通用户,并指定其权限为。 前言 对于数据库而言,用户和权限是非常重要的一部分,因为这涉及到安全,那么mongoDB的用户和权限是怎么样的呢? 说明 环境说明 本文所用的mongoDB版本是3.6,操作系统是windows。 其他说明 限于篇幅,本文不会介绍数据库从下载到安装的过程,关...

    CastlePeaK 评论0 收藏0
  • 记录一次并发读取MongoDB的踩坑过程

    摘要:出现的问题笔者前段时间开发一个新项目的某个功能模块要读取老游戏中某个数据库计作库连续读库中的个集合相当于的张表取数据在测试环境单次操作时是内但是并发测试情况下比如内个并发时读取库个集合的耗时能达到以上甚至且个并发请求几乎同时完成但是在我本地 出现的问题 笔者前段时间开发一个新项目的某个功能模块,要读取老游戏中某个Mongo数据库(计作A库),连续读A库中的6个集合(相当于MySQL的6...

    luffyZh 评论0 收藏0
  • MongoDB 入门教程

    摘要:可选,抛出异常的级别。示例教程更新一条数据标题。命令行下执行进入数据库进入库可查看当前库用户列表执行新建用户设置账户密码,并指定级别。重启服务重新进入数据库,发现命令无法执行,报权限不足错误。命令可以正常执行。 1.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB ...

    Vicky 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<