前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB开启shard操作最小权限用户授权

MongoDB开启shard操作最小权限用户授权

作者头像
拓荒者
发布2019-09-11 16:35:00
1.4K0
发布2019-09-11 16:35:00
举报
文章被收录于专栏:运维经验分享运维经验分享

MongoDB开启shard操作最小权限用户授权

 (2018-01-25 15:52:29)

转载

标签:  mongodb   shard   最小权限   shardcollection   privileges

分类: 数据库

背景

操作需求是为程序用户提供一个最小权限,满足以下操作需求:

  • 允许完全操作指定数据库
  • 允许对指定数据库中的collection开启shard

通过这样限制,最多只会影响到指定的数据库, 避免因为程序问题或者其他外部因素导致数据处理逻辑出问题而影响到整个集群。


规划

myDb.myCollection为例,对collection开启shard,需要进行以下操作:

  1. 如果数据库没有开启分片功能,需要先开启: sh.enableSharding("myDb")
  2. 如果collection里面已经有数据,需要先创建对应的shardkey索引: use myDb db.myCollection.createIndex( {"shard_key_field": "hashed"} )
  3. 对指定collection开启shard: sh.shardCollection("myDb.myCollection", {"shard_key_field": "hashed"})

所以需要相应的权限来运行以上3个操作命令。 参考官网文档描述,需要给用户提供两个权限:


操作

因为原来项目用户关于业务数据库的角色就已经是dbOwner, 因此,再创建一个具有开启shard相关操作权限的角色,授予项目数据库用户即可实现最小权限控制。

首先创建新的角色,提供上述的两个操作权限。 这里命名为opShardRole,可以根据实际需求更改:

代码语言:javascript
复制
use myDb;
db.createRole({
        role: "opShardRole",
        privileges:[
            {
                resource:{db:"myDb", collection:""},
                actions:["enableSharding, "createIndex"]
            }
        ],
        roles:[]
    }
)

然后将opShardRole角色grant给项目用户,这里假设用户名为project_user

代码语言:javascript
复制
db.grantRolesToUser("project_user",[{role:"opShardRole", db:"myDb"}])

至此,操作完成,可以通过项目用户进行测试开启shard相关操作有无问题。


检查相关用户权限

切换到业务db,并检查相关的用户及角色:

  • 查看角色相关操作权限: mongos> db.getRole("opShardRole",{showPrivileges: true}) { "role" : "opShardRole", "db" : "myDb", "isBuiltin" : false, "roles" : [ ], "inheritedRoles" : [ ], "privileges" : [ { "resource" : { "db" : "myDb", "collection" : "" }, "actions" : [ "createIndex", "enableSharding", "shardCollection" ] } ], ... }
  • 查看用户关联的角色: mongos> show users; { "_id" : "myDb.project_user", "user" : "project_user", "db" : "myDb", "roles" : [ { "role" : "opShardRole", "db" : "myDb" }, { "role" : "dbOwner", "db" : "myDb" } ] }

可以看到,opShardRole这个角色确实已经有了对业务数据库myDb的所需shard操作权限, 同时,project_user这个用户也已经有了opShardRole角色授权。

分享:

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB开启shard操作最小权限用户授权
    • 背景
      • 规划
        • 操作
          • 检查相关用户权限
          相关产品与服务
          云数据库 MongoDB
          腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档