mongodb权限管理(转)
Mongodb 预定义角色
Mongodb 中预定义了一些角色,把这些角色赋予给适当的用户上,用户就只能进行角色范围内的操作。
- 数据库用户角色 (所有数据库都有)
read用户可以读取当前数据库的数据readWrite用户可以读写当前数据库的数据
- 数据库管理角色(所有数据库都有)
dbAdmin管理员用户但不能对用户和角色管理授权dbOwner数据库所有者可进行任何管理任务userAdmin可以管理当前数据的用户和角色
- 集群管理角色(admin数据库可用)
clusterAdmin集群所有管理权限,是clusterManager,clusterMonitor,hostManager合集clusterManager集群管理和监控clusterMonitor集群监控,只读的hostManager监控和管理服务器
- 备份和恢复角色(admin数据库可用)
backuprestore
- 所有数据库角色(admin数据库可用)
readAnyDatabase读取所有数据库readWriteAnyDatabase读写所有数据库userAdminAnyDatabase所有数据库的 userAdmin 权限dbAdminAnyDatabase所有数据库的 dbAdmin 权限
- 超级角色(admin数据库可用)
root超级用户
- 内部角色
__system所有操作权限
更多预定于角色的信息请参看:https://docs.mongodb.com/manual/core/security-built-in-roles/
创建用户定义的角色
角色授权用户访问MongoDB资源。 MongoDB提供了许多内置的角色,管理员可以使用它们来控制对MongoDB系统的访问。 但是,如果这些角色无法描述所需的权限集,则可以在特定数据库中创建新角色。
除了在管理数据库中创建的角色外,角色只能包含适用于其数据库的权限,并且只能继承其数据库中的其他角色。
在管理数据库中创建的角色可以包括适用于管理数据库,其他数据库或群集资源的权限,并且可以从其他数据库中的角色以及管理数据库继承。
要创建新角色,可使用db.createRole()方法,指定permissions数组中的权限和roles数组中的继承角色。
MongoDB使用数据库名称和角色名称的组合来唯一定义角色。 每个角色的范围限定在创建角色的数据库中,但MongoDB将所有角色信息存储在admin数据库的admin.system.roles集合中。
先决条件
要在数据库中创建角色,您必须具有:
- 对该数据库资源的
createRole操作。 - 对该数据库的
grantRole操作指定新角色的权限以及指定要继承的角色。
内置角色 userAdmin 和 userAdminAnyDatabase 在其各自的资源上提供 createRole 和 grantRole 操作。
创建角色来管理当前操作
以下示例创建一个名为 manageOpRole 的角色,该角色仅提供运行 db.currentOp()和db.killOp()的权限。
第一步:使用相应的权限连接到MongoDB
使用“先决条件”部分指定的权限连接到 mongod 或 mongos 。
以下过程使用在“启用认证”中创建的用户:myUserAdmin。
$ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
myUserAdmin具有在管理员以及其他数据库中创建角色的权限。
第二步:创建一个新角色来管理当前操作
manageOpRole具有对多个数据库以及群集资源的权限。 因此,您必须在管理数据库中创建该角色。
use admin
db.createRole(
{
role: "manageOpRole",
privileges: [
{ resource: { cluster: true }, actions: [ "killop", "inprog" ] },
{ resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
],
roles: []
}
)
新角色授予杀死/终止任何操作的权限。
警告: 终止运行操作非常小心。只能使用
db.killOp()方法或killOp命令终止客户端发起的操作,并且不会终止内部数据库操作。
创建角色用来运行 mongostat
以下示例创建一个名为 mongostatRole 的角色,该角色仅提供运行 mongostat 的权限。
第一步:使用相应的权限连接到MongoDB
使用“先决条件”部分指定的权限连接到 mongod 或 mongos 。
以下过程使用在启用认证中创建的用户:myUserAdmin。
$ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
myUserAdmin具有在管理员以及其他数据库中创建角色的权限。
第二步:创建一个新角色来管理当前的操作
mongostatRole具有作用于群集资源的权限。 因此,您必须在管理数据库中创建该角色。
use admin
db.createRole(
{
role: "mongostatRole",
privileges: [
{ resource: { cluster: true }, actions: [ "serverStatus" ] }
],
roles: []
}
)
先决条件
- 必须对数据库具有
grantRole操作才能在该数据库上授予角色。 - 必须在数据库上具有
revokeRole操作以撤销该数据库上的角色。 - 要查看角色的信息,必须明确授予该角色,或必须对该角色的数据库具有
viewRole操作。
执行步骤
第一步:使用相应的权限连接到MongoDB
以具有先决条件部分中指定的权限的用户身份连接到 mongod 或 mongos 。
以下过程使用在启用认证中创建的用户:myUserAdmin。
$ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
第二步:识别用户的角色和权限
要显示要修改的用户的角色和权限,请使用db.getUser()和db.getRole()方法。
例如,要查看在示例中创建的 reportsUser 的角色,执行以下命令:
use reporting
db.getUser("reportsUser")
要显示在 “accounts” 数据库上由 readWrite 角色授予用户的权限,请执行以下操作:
use accounts
db.getRole( "readWrite", { showPrivileges: true } )
第三步:确定授予或撤销的权限
如果用户需要额外的权限,则向用户授予具有所需权限集的角色或角色。 如果此类角色不存在,请使用适当的权限集创建新角色。
撤销由现有角色提供的特权子集:撤销原始角色并授予仅包含所需权限的角色。如果角色不存在,您需要创建新角色。
第四步:修改用户的访问权限
4.1. 撤销角色
使用db.revokeRolesFromUser()方法撤销角色。以下示例操作从account数据库上删除用户reportsUser 的 readWrite 角色:
use reporting
db.revokeRolesFromUser(
"reportsUser",
[
{ role: "readWrite", db: "accounts" }
]
)
4.2. 授予角色
使用db.grantRolesToUser()方法授予角色。 例如,以下操作授予reportsUser用户account数据库上的读取角色:
use reporting
db.grantRolesToUser(
"reportsUser",
[
{ role: "read", db: "accounts" }
]
)
对于分片集群,用户的更改将在命令运行的 mongos 上即时生效。但是,对于群集中的其他mongos 实例,用户缓存可能会等待10分钟才能刷新。请参阅userCacheInvalidationIntervalSecs。
修改现有用户的密码
先决条件
要修改数据库上另一个用户的密码,您必须对该数据库具有changeAnyPassword操作。
操作步骤:
第一步:使用相应的权限连接到MongoDB
以具有先决条件部分中指定的权限的用户身份连接到 mongod 或 mongos 。
以下过程使用在启用认证中创建的用户:myUserAdmin。
$ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
第二步:更改密码
将用户的用户名和新密码传递给db.changeUserPassword()方法。
以下操作将reporting用户的密码更改为:SOh3TbYhxuLiW8ypJPxmt1oOfL:
db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL")
查看用户的角色
先决条件
要查看其他用户的信息,您必须对其他用户的数据库具有viewUser操作。
用户可以查看自己的信息。
第一步:使用相应的权限连接到MongoDB
以具有先决条件部分中指定的权限的用户身份连接到 mongod 或 mongos 。
以下过程使用在启用认证中创建的用户:myUserAdmin。
$ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
第二步:查看用户的角色
使用usersInfo命令或db.getUser()方法显示用户信息。
例如,要查看在示例中创建的 reportsUser 的角色,请发出:
use reporting
db.getUser("reportsUser")
在返回的文档中,roles字段显示reportsUser的所有角色:
...
"roles" : [
{ "role" : "readWrite", "db" : "accounts" },
{ "role" : "read", "db" : "reporting" },
{ "role" : "read", "db" : "products" },
{ "role" : "read", "db" : "sales" }
]
查看角色的权限
先决条件
要查看角色的信息,您必须明确授予该角色,或必须对该角色的数据库具有 viewRole 操作。
第一步:使用相应的权限连接到MongoDB
以具有先决条件部分中指定的权限的用户身份连接到 mongod 或 mongos 。
以下过程使用在启用认证中创建的用户:myUserAdmin。
$ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
第二步:查看角色授予的权限
对于给定的角色,请使用db.getRole()方法或rolesInfo命令与showPrivileges选项一起执行:
例如,要查看在product数据库上由读取角色授予的权限,请使用以下操作,问题如下:
use products
db.getRole( "read", { showPrivileges: true } )
在返回的文档中,有两个数组:privileges和inheritedPrivileges。权限列出了角色指定的权限,并排除了从其他角色继承的权限。 inheritedPrivileges列出了由此角色授予的所有权限,这两个角色都是直接指定的并被继承。 如果该角色不能从其他角色继承,则两个字段是相同的。
...
"privileges" : [
{
"resource": { "db" : "products", "collection" : "" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
},
{
"resource" : { "db" : "products", "collection" : "system.js" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
}
],
"inheritedPrivileges" : [
{
"resource": { "db" : "products", "collection" : "" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
},
{
"resource" : { "db" : "products", "collection" : "system.js" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
}
]
插入
2.6之后
security:
authorization: enabled
2.6之前
auth = true
mongodb权限管理(转)的更多相关文章
- MongoDB权限管理之用户名和密码的操作
MongoDB默认是不需要输入用户名和密码,客户就可以登录的.但是出于安全性的考虑,我们还是要为其设置用户名和密码.本文主要介绍的是MongoDB权限管理之用户名和密码的操作,希望能对您有所帮助. 本 ...
- MongoDB——权限管理
MongoDB--权限管理 MongoDB默认是没有权限验证的,但生产环境中,没有权限控制是很不安全的. 我们先不详谈太多概念,直接动手创建两个典型的账号: 超级管理员,类似sql server的sa ...
- mongodb权限管理
说到mongodb就得先谈谈mongodb的用户组,和传统的关系型数据库不一样,mongodb并没有在创建应用时就要求创建权限管理组,所以类似于Robomongo这样的数据库可视化工具在创建conne ...
- 基于MongoDB权限管理+gridfs文件上传------云盘系统
学了一会Mongo,开始毕设的编写. 毕设目前一共分为如下模块 用户管理模块 管理员管理模块 文件管理模块 分享模块 目前已经完成了权限管理部分的后端代码.上传下载已经实现Demo.先把权限弄好后在整 ...
- MongoDB 权限管理 用户名和密码的操作
在刚安装完毕的时候MongoDB都默认有一个admin数据库,而admin.system.users中将会保存比在其它数据库中设置的用户权限更大的用户信息. 当admin.system.users中 ...
- Mongodb 权限管理
- MongoDB3.X单机及shading cluster集群的权限管理(基于3.4.5)
mongodb集群的权限管理分为两部分,一部分是最常用的Role-Based Access Control,也就是用户名密码方式,这种验证方式一般出现在单机系统,或者集群中client端连接Mongo ...
- MongoDB账号管理及实践
此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 目前蜂巢(云计算基础服务)MongoDB上已经有数十个实例,其中不少是企业用户或公司内部产品用户的.用户多了 ...
- MongoDB和Java(7):MongoDB用户管理
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
随机推荐
- Java内存区域与内存异常
参考:深入理解Java虚拟机 周志明 方法区 虚拟机战 本地方法栈 堆 程序计数器 其他 设置 方法区 线程共享,加载类信息.常量.静态变量.JIT后的代码,别名Non-Heap 对于HotSpot, ...
- 正则表达式 re模块 collections模块
根据手机号码一共11位并且是只以13.14.15.18开头的数字这些特点,我们用python写了如下代码: while True: phone_number = input('please input ...
- POJ1019 Number Sequence
Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36256 Accepted: 10461 ...
- 【bzoj3227】红黑树
神TM的红黑树,其实本质上应该还是一种树dp的问题…… 一开始想了一个比较裸的树dp,后来发现还有更强的做法. 每个前端黑节点是看作一个物品,然后这就是很典型的树形dp的问题. 不过可以这么考虑,考虑 ...
- 最快的序列化组件protobuf的.net版本protobuf.net
Protobuf是google开源的一个项目,用户数据序列化反序列化,google声称google的数据通信都是用该序列化方法.它比xml格式要少的多,甚至比二进制数据格式也小的多. Prot ...
- Nginx 的安装配置入门(mac)
1.安装Nginx服务器: 执行命令 brew install nginx 安装完以后,可以在终端输出的信息里看到一些配置路径: /usr/local/etc/nginx/nginx.conf (配置 ...
- office中密码的移除方法
密码有两种,一种是修改密码,一种是访问密码,通常两种密码的创建位置不同.对于访问密码,只需要在文件→信息 中将密码删除 对于修改密码,则要输入密码以后另存,然后在保存窗口里边点工具,下拉菜单里选常规选 ...
- C++指针和数组的区别(不能混用的情况)
通常情况下,C++中指针和数组是可以混用的,但是,在编写字符数组的全排列的时候,混用却出了问题,因此,今天特地mark一下,以备日后查找 这里整理的,不包括用new开辟的动态数组 1.数组一旦声明,我 ...
- 安全管道工具SSF
安全管道工具SSF SSF(Secure Socket Funneling)是一款安全网络通信工具.它可以将多个管道的数据通过一个TLS连接转发给远程计算机,从而实现数据的安全传输.它不仅支持TC ...
- [BZOJ 4720] 换教室
Link: BZOJ 4720 传送门 Solution: 2016年$NOIP$考的一道语文题 题面虽长,但思路并不难想 对于这类期望问题,大多数时候都用期望$dp$来解决 根据询问:在$n$个时间 ...