MongoDB安全:创建角色(User-Defined Roles)
MongoDB已经定义了一些内建角色,同时还提供了用户自定义角色的功能,以满足用户千差万别的需求。
官文User-Defined Roles中对其有简略介绍,但要熟悉怎么创建角色,还需要了解下面的这些概念:
-(数据库)操作(Privilege Actions)
-(数据库)资源(Resource)
-Scope
-权限(Privileges)
-权限继承(Inherited Privileges)
-
上面的概念可以参考下面的官文:
官文中下面几句话孤以为是重点:
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)的更多相关文章
- MongoDB的内置角色 Built-In Roles
关于芒果的权限控制说白了就是定义 Role(角色) 来控制对数据库进行的操作(调用的方法比如查询方法find). 系统内置的Role分为 以下几大类: Database User Roles 这个是针 ...
- [Config]Zabbix的Mongodb插件安装,centos
1.yum install php-devel php-pear httpd-devel 2.安装mongo php驱动,pecl install mongo 3.pecl install mongo ...
- Codeigniter MongoDB类库
安装方法:1.将mongodb.php 放到config目录2.将Mongo_db.php放到library目录 使用方法: $this->mongo_db->where_gte('age ...
- ECOS-Ecstore mongodb大数据 读写效率优化
转自同功BBS 拆表存取kv <?php /* 经过拆变优化的ECStore mongodb 类 base/lib/kvstore/mongodb.php*/ class base_kvstor ...
- A Framework for Programme Management
In business today organisations manage multiple projects concurrently with shared or overlapping res ...
- Linux_Oracle命令大全
一,启动 1.#su - oracle 切换到oracle用户且切换到它的环境 2.$lsnrctl status 查看监听及数据库状态 3.$ls ...
- 【Ansible】Playbook实例
Learn to build Ansible playbooks with our guide, one step at a time In our previous posts, we introd ...
- [EXT JS]"hasMany" association on ExtJS 4.1.1a
ExtJS uses "hasMany" association to support nested json. However the sencha docs lacks wel ...
- Linux_oracle命令大全(转)
Linux_oracle命令大全 一,启动 1.#su - oracle 切换到oracle用户且切换到它的环境 2.$lsnrctl status 查看 ...
随机推荐
- BZOJ 2460: [BeiJing2011]元素
2460: [BeiJing2011]元素 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 878 Solved: 470[Submit][Statu ...
- Java EE之会话
1.需要会话的原因 所有HTTP服务器技术都普遍采用HTTP会话的概念,并且Java EE也在规范中添加了对会话的支持. 维持状态 会话用于维持请求和请求之间的状态.HTTP请求自身是完全无状态的.从 ...
- 团体程序设计天梯赛 L3-012. 水果忍者
/*对于一条满足条件的直线,向下移,直到触碰一条线段的下端点,仍然经过其它线段,该直线仍然满足条件 即以一条线段的下(上)端点作为直线上的一点,求为了经过一条线段的最小.最大斜率值(mink,maxk ...
- Service Fabric Placement and Load Balancing
作者:潘罡 (Van Pan)@ Microsoft 什么是PLB (Placement and Load Balancing) 介绍FM的上文中,我们提到了PLB. 这个组件和FM协同工作,为FM提 ...
- Swarm配置文件管理
一.前言 Docker 17.06引入了swarm服务配置,允许您在服务映像外部或运行容器中存储非敏感信息,例如配置文件. 这允许您保持镜像尽可能通用,而无需将配置文件绑定到容器或使用环境变量.在Sw ...
- Java基础-正则表达式(Regular Expression)语法规则简介
Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...
- PHP数组的遍历
对于012345...这样的数组可以用for进行遍历 $arr=array('a','b','c','d','e'); for($key=0;$key<count($arr);$key++){ ...
- Jmeter javaRequest插件开发
1. 适用场景 Jmeter工具当前支持的协议或协议所支持的传输方式及传输内容不能满足当前项目的测试要求时,就需要根据实际要求手动编写java测试代码(实现对应的Jmeter规范),以插件方式加载到J ...
- Java并发编程原理与实战七:线程带来的风险
在并发中有两种方式,一是多进程,二是多线程,但是线程相比进程花销更小且能共享资源.但使用多线程同时会带来相应的风险,本文将展开讨论. 一.引言 多线程将会带来几个问题: 1.安全性问题 线程安全性可能 ...
- List(JDK1.7)(1)
java.util包. 与Set不同, List允许重复的元素.即 e1.equals(e2). 部分方法定义 int size(); 返回列表中元素的个数,如果超过Integer.MAX_VALUE ...