MongoDB已经定义了一些内建角色,同时还提供了用户自定义角色的功能,以满足用户千差万别的需求。

官文User-Defined Roles中对其有简略介绍,但要熟悉怎么创建角色,还需要了解下面的这些概念:

-(数据库)操作(Privilege Actions)

-(数据库)资源(Resource)

-Scope

-权限(Privileges)

-权限继承(Inherited Privileges)

-

上面的概念可以参考下面的官文:

Role-Based Access Control

Privilege Actions

Resource Document

官文中下面几句话孤以为是重点:

1.When adding a role, you create the role in a specific database.

在添加角色时,是将角色添加到某个数据库下。

2.MongoDB uses the combination of the database and the role name to uniquely define a role.

MongoDB使用 数据库和角色名 作为 角色的 唯一标识。

3.MongoDB stores all role information in the system.roles collection in the admin database.

MongoDB将所有角色信息存储到 admin数据库下的名为system.roles的集合 中。

4.A MongoDB privilege comprises a resource and the permitted actions.

一个MongoDB权限 包含一个资源上允许的操作,即可以对某个资源做什么。

5.a user-defined role scoped for a non-admin database VS. User-defined roles scoped for the admin database

自定义在非admin数据库上的角色 对比 自定义在admin数据库上的角色

上面两种角色 孤的翻译或许不准确,请读者提供意见,后者有用更多能力——创建、更新、继承等方面。

怎么创建角色呢?

本文的重点。更准确的说法应该是 怎么创建某个数据库的角色?使用db.createRole()!

官文db.createRole()中给出了其具体使用方法:

db.createRole(role, writeConcern)

参数role是必须的,定义了角色名称及其权限定义;参数writeConcern是可选的,暂不熟悉其用法及意义,请参考官文Write Concern

官文db.createRole()中给出的role参数(document)的规范:

其中,

role为角色名称;

privileges为 权限(资源上的操作)列表;

roles为 需要继承的 某些角色 在 某个数据库上的权限 的列表;

authenticationRestrictions为 服务器对该角色 强制要求的认证限制,可选项,比如,只允许某些IP地址的拥有该角色的用户的连接请求(很有用啊!)。

当然,具体细节请参考官文db.createRole()及其它官文。

疑问:角色名称 可以使用哪些字符?是否能用点号(.)等?是否可以用中文?长度限制?加上数据库名后的长度限制(唯一标识)?每个数据库可以创建多少个角色?整个服务器呢?整个Replica Set呢?更大规模的呢?

提示:本文涉及到单例MongoDB服务器,而没有涉及到Replica Set、集群等更大规模的角色管理,还需要继续dig(以后项目用到了再dig也不迟,近期可以考虑熟悉Replica Set的相关操作)。

提示:在创建角色前,请确认当前用户是否在目标资源上拥有createRole、grantRole、setAuthenticationRestriction等操作的权力。否则,创建失败。

下面是官文db.createRole()中的一个示例(JavaScript格式?):

 use admin
db.createRole(
{
role: "myClusterwideAdmin",
privileges: [
{ resource: { cluster: true }, actions: [ "addShard" ] },
{ resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] },
{ resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] },
{ resource: { db: "", collection: "" }, actions: [ "find" ] }
],
roles: [
{ role: "read", db: "admin" }
]
},
{ w: "majority" , wtimeout: 5000 }
)

更多示例请参考官文Manage Users and Roles(下午孤也会去看看这个)。

提示:示例 真的很重要!可以加快学习的进程和效率!节约时间(生命)!

【角色管理】

对了,除了创建角色,MongoDB还允许修改角色、更新角色、删除角色等,请在官文mongo Shell Methods - Role Management查看更多信息:

后记

怎么为不同规模的MongoDB应用创建角色呢?策略是什么?

做了MongoDB里面的相关安全操作,可以保证多大程度的安全?

模糊地记得,数据库文件会被锁住,这个又该怎么办?提高操作系统、网络等的安全性?

MongoDB源码漏洞出现时,怎么第一时间发现并解决?保证数据的安全性、保证基于MongoDB的应用的稳定性?

额,还有好多要做的。

当然,知识的内容很多,普通程序员、高级程序员、架构师需要了解的东西不一样,需要循序渐进才是!

要是精通MongoDB了,直接做MongoDB管理员好了!

路漫漫~

角色创建成功后,就可以考虑建立基于角色的用户了。

MongoDB安全:创建角色(User-Defined Roles)的更多相关文章

  1. MongoDB的内置角色 Built-In Roles

    关于芒果的权限控制说白了就是定义 Role(角色) 来控制对数据库进行的操作(调用的方法比如查询方法find). 系统内置的Role分为 以下几大类: Database User Roles 这个是针 ...

  2. [Config]Zabbix的Mongodb插件安装,centos

    1.yum install php-devel php-pear httpd-devel 2.安装mongo php驱动,pecl install mongo 3.pecl install mongo ...

  3. Codeigniter MongoDB类库

    安装方法:1.将mongodb.php 放到config目录2.将Mongo_db.php放到library目录 使用方法: $this->mongo_db->where_gte('age ...

  4. ECOS-Ecstore mongodb大数据 读写效率优化

    转自同功BBS 拆表存取kv <?php /* 经过拆变优化的ECStore mongodb 类 base/lib/kvstore/mongodb.php*/ class base_kvstor ...

  5. A Framework for Programme Management

    In business today organisations manage multiple projects concurrently with shared or overlapping res ...

  6. Linux_Oracle命令大全

     一,启动 1.#su - oracle              切换到oracle用户且切换到它的环境 2.$lsnrctl status           查看监听及数据库状态 3.$ls ...

  7. 【Ansible】Playbook实例

    Learn to build Ansible playbooks with our guide, one step at a time In our previous posts, we introd ...

  8. [EXT JS]"hasMany" association on ExtJS 4.1.1a

    ExtJS uses "hasMany" association to support nested json. However the sencha docs lacks wel ...

  9. Linux_oracle命令大全(转)

    Linux_oracle命令大全 一,启动 1.#su - oracle              切换到oracle用户且切换到它的环境 2.$lsnrctl status           查看 ...

随机推荐

  1. BZOJ 3210: 花神的浇花集会

    3210: 花神的浇花集会 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 577  Solved: 299[Submit][Status][Discus ...

  2. NOIP2018前的一些计划&记录(日更)

    先空着,等停课了再开始写. 诸位好,我是yyb.现在显然已经不再是高一的小蒟蒻了,已经升级为了高二的菜鸡了 现在已经不能再每天划划水切切题了,毕竟......已经高二了,所有的机会从高一的两倍全部除了 ...

  3. Mythological VI

    Description 有\(1...n\)一共\(n\)个数.保证\(n\)为偶数. 小M要把这\(n\)个数两两配对, 一共配成\(n/2\)对.每一对的权值是他们两个数的和. 小M想要知道这\( ...

  4. 洛谷 P2048 [NOI2010]超级钢琴 解题报告

    P2048 [NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为 ...

  5. activity 与 service 之间的通信

    activity和service通信:通过binder 举个我实际项目中的例子:在service中下载更新应用 首先是下载更新apk的service: public class UpdateVersi ...

  6. Eclipse Oxygen(4.7.0)安装插件Eclipse Class Decompiler反编译JAR文件

    引用自官方内容 Eclipse Class Decompiler是一款Eclipse插件,整合了多种反编译器,和Eclipse Class Viewer无缝集成,能够很方便的使用插件查看类库源码,进行 ...

  7. [NOI2012]美食节——费用流(带权二分图匹配)+动态加边

    题目描述 小M发现,美食节共有n种不同的菜品.每次点餐,每个同学可以选择其中的一个菜品.总共有m个厨师来制作这些菜品.当所有的同学点餐结束后,菜品的制作任务就会分配给每个厨师.然后每个厨师就会同时开始 ...

  8. BZOJ 4827 循环卷积

    题意:求两个手环任意旋转对应位置的差值+c的平方最小 设b旋转到k最小,那么先将b扩张一倍构成一圈,那么答案式子就是 将这个式子展开一下,事情就变得有趣了起来 这个式子将a[ ]翻转可以化成卷积形式 ...

  9. Docker入门与应用系列(四)数据卷管理

    一.介绍 Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(译者注:镜像栈顶部)添加一个读写层.如果运行中的容器修改了现有的一个已经存 ...

  10. P3130 [USACO15DEC]计数haybalesCounting Haybales

    P3130 [USACO15DEC]计数haybalesCounting Haybales 1)给定一段连续的田地,给每一个田地都增加一些新的草包. 2)给定一段连续的田地,找出草包最少的田地有多少草 ...