MongoDB 内置角色

2023-11-14

(1).数据库用户角色

针对每一个数据库进行控制。
read :提供了读取所有非系统集合,以及系统集合中的system.indexes, system.js, system.namespaces
readWrite: 包含了所有read权限,以及修改所有非系统集合的和系统集合中的system.js的权限.

 

(2).数据库管理角色

每一个数据库包含了下面的数据库管理角色。
dbOwner:该数据库的所有者,具有该数据库的全部权限。
dbAdmin:一些数据库对象的管理操作,但是没有数据库的读写权限。(参考:http://docs.mongodb.org/manual/reference/built-in-roles/#dbAdmin
userAdmin:为当前用户创建、修改用户和角色。拥有userAdmin权限的用户可以将该数据库的任意权限赋予任意的用户。

 

(3).集群管理权限

admin数据库包含了下面的角色,用户管理整个系统,而非单个数据库。这些权限包含了复制集和共享集群的管理函数。
clusterAdmin:提供了最大的集群管理功能。相当于clusterManager, clusterMonitor, and hostManager和dropDatabase的权限组合。
clusterManager:提供了集群和复制集管理和监控操作。拥有该权限的用户可以操作config和local数据库(即分片和复制功能)
clusterMonitor:仅仅监控集群和复制集。
hostManager:提供了监控和管理服务器的权限,包括shutdown节点,logrotate, repairDatabase等。
备份恢复权限:admin数据库中包含了备份恢复数据的角色。包括backup、restore等等。

 

(4).所有数据库角色

admin数据库提供了一个mongod实例中所有数据库的权限角色:
readAnyDatabase:具有read每一个数据库权限。但是不包括应用到集群中的数据库。
readWriteAnyDatabase:具有readWrite每一个数据库权限。但是不包括应用到集群中的数据库。
userAdminAnyDatabase:具有userAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
dbAdminAnyDatabase:提供了dbAdmin每一个数据库权限,但是不包括应用到集群中的数据库。

(5). 超级管理员权限

root: dbadmin到admin数据库、useradmin到admin数据库以及UserAdminAnyDatabase。但它不具有备份恢复、直接操作system.*集合的权限,但是拥有root权限的超级用户可以自己给自己赋予这些权限。

(6). 备份恢复角色:backup、restore;

(7). 内部角色:__system

PS:关于每个角色所拥有的操作权限可以点击上面的内置角色链接查看详情。

官方实例

  1. use products # mongoDB的权限设置是以库为单位的,必选要先选择库  
  2. db.createUser(   
  3. "user" : "accountAdmin01",   
  4.  "pwd": "cleartext password",  
  5.  "customData" : { employeeId: 12345 },  
  6.  "roles" : [ { role: "clusterAdmin", db: "admin" },   
  7.              { role: "readAnyDatabase", db: "admin" },  
  8.              "readWrite" ] },  
  9. { w: "majority" , wtimeout: 5000 } ) # readWrite 适用于products库,clusterAdmin与readAnyDatabase角色适用于admin库  

 

熟 悉 Oracle 的童鞋们都知道,数据库用户有两种,一种是管理员,用来管理用户,一种是普通用户,用来访问数据。类似的,为 MongoDB 规划用户鉴权时,至少要规划两种角色:用户管理员和数据库用户。如果搭建了分片或主从,可能还会要规划数据库架构管理员的角色,它们专门用来调整数据库的 分布式架构。

在创建用户之前,我们首先要修改 MongoDB 的启动方式。缺省方式下 MongoDB 是不进行鉴权检查的。我们只要在运行 MongoDB 的命令后面加上一个 --auth 参数即可,例如:

  1. mongod --dbpath ./db1 --port 20000 --auth  

 

MongoDB默认不启用安全授权机制。在单节点环境下,你需要在启动mongod时指定–auth,或者在参数里设置auth=true来启用这个特性。

如果上述命令无效的话,那就 手动开启用户权限认证

  1. [gideon@ikeepstudying]$ vi /etc/mongodb.conf           //将auth=true前面的注释拿掉  
  2. [gideon@ikeepstudying]$ /etc/init.d/mongod restart      //重启生效  
  3. // 或者使用 sudo service mongod restart 重启  

 

如何创建用户管理员

用户管理员是第一个要创建的用户。在没有创建任何用户之前,你可以随意创建用户;但数据库中一旦有了用户,那么未登录的客户端就没有权限做任何操作了,除非使用db.auth(username, password)方法登录。

用户管理员的角色名叫 userAdminAnyDatabase,这个角色只能在 admin 数据库中创建。下面是一个例子:

  1. > use admin  
  2. switched to db admin  
  3. > db.createUser({user:"root",pwd:"root123",roles:["userAdminAnyDatabase"]})  
  4. Successfully added user: { "user" : "root", "roles" : [ "userAdminAnyDatabase" ] }  

 

这个例子创建了一个名为 root 的用户管理员。创建完了这个用户之后,我们应该马上以该用户的身份登录:

  1. > db.auth("root","root123")  
  2. 1  

 

db.auth() 方法返回 1 表示登录成功。接下来我们为指定的数据库创建访问所需的账号。

 

如何创建数据库用户

首先保证你已经以用户管理员的身份登录 admin 数据库。然后用 use 命令切换到目标数据库,同样用db.createUser() 命令来创建用户,其中角色名为 “readWrite”。

普通的数据库用户角色有两种,read 和 readWrite。顾名思义,前者只能读取数据不能修改,后者可以读取和修改。

下面是一个例子:

  1. > use test  
  2. switched to db test  
  3. > db.createUser({user:"testuser",pwd:"testpass",roles:["readWrite"]})  
  4. Successfully added user: { "user" : "testuser", "roles" : [ "readWrite" ] }  
  5. > db.auth("testuser","testpass")  
  6. 1  

 

这样 MongoDB 的数据安全性就得到保障了,没有登录的客户端将无法执行任何命令。

除了db.createUser(),下面几个函数也是常用的:
获得数据库的所有用户权限信息:db.getUsers()
获得某个用户的权限信息:db.getUser()
创建角色: db.createRole()
更新角色:db.updateRole()
删除角色:db.dropRole()
获得某个角色信息:db.getRole()
删除用户:db.dropUser()
删除所有用户:db.dropAllUsers()
将一个角色赋予给用户:db.grantRolesToUser()
撤销某个用户的某个角色权限:db.revokeRolesFromUser()
更改密码:db.changeUserPassword()
更多内容可以去看下 reference

那么,设置完这些后,如果需要登陆Rockmongo的话,可参考如下设置:

进入Rockmongo安装的根目录下,通常在/var/www/rockmongo路径下。找到config.php文件并打开,在文件下面添加如下几行配置代码:

  1. /** 
  2.  * This is the configuration  for remote mongodb 
  3.  */  
  4. $MONGO["servers"][$i]["mongo_name"] = "The name of mongodb"; // 随便自己命名,显示在rockmongo的db昵称,如: mongoHQ-helloworld  
  5. $MONGO["servers"][$i]["mongo_host"] = "The host of mongodb"; // 远程mongodb服务器的主域名,如:troup.mongohq.com  
  6. $MONGO["servers"][$i]["mongo_port"] = "The port of mongodb"; // 远程mongodb服务器提供的端口,如37017  
  7. $MONGO["servers"][$i]["mongo_user"] = "The username of mongodb"; // 拥有权限操作该db的用户名,如:pigerla  
  8. $MONGO["servers"][$i]["mongo_pass"] = "The password of mongodb"; // 拥有权限操作该db的用户密码,如:xxxxxx  
  9. $MONGO["servers"][$i]["mongo_db"] = "The database's name of mongodb"; // 数据库的名称,如:helloworld  
  10. $MONGO["servers"][$i]["mongo_auth"] = false; // 当值为false时,表示rockmongo使用这里的配置去连接远程mongodb,否则,只能在rockmongo登录界面输入以上信息进行登录  
  11. $MONGO["servers"][$i]["control_users"]["admin"] = "admin"; // 当mongo_auth为false时,这设置才有效,表示在rockmongo登录界面,用户名为admin,密码为  
  12. admin,这也是默认配置。  
  13. $i ++;  

 

我个人设置如下:

  1. /**  
  2. * Configuration of MongoDB servers 
  3. *  
  4. * @see more details at http://rockmongo.com/wiki/configuration?lang=en_us 
  5. */  
  6. $MONGO["servers"][$i]["mongo_name"] = "Localhost";//mongo server name  
  7. //$MONGO["servers"][$i]["mongo_sock"] = "/var/run/mongo.sock";//mongo socket path (instead of host and port)  
  8. $MONGO["servers"][$i]["mongo_host"] = "127.0.0.1";//mongo host  
  9. $MONGO["servers"][$i]["mongo_port"] = "27017";//mongo port  
  10. $MONGO["servers"][$i]["mongo_timeout"] = 0;//mongo connection timeout  
  11. //$MONGO["servers"][$i]["mongo_db"] = "MONGO_DATABASE";//default mongo db to connect, works only if mongo_auth=false  
  12. //$MONGO["servers"][$i]["mongo_user"] = "MONGO_USERNAME";//mongo authentication user name, works only if mongo_auth=false  
  13. //$MONGO["servers"][$i]["mongo_pass"] = "MONGO_PASSWORD";//mongo authentication password, works only if mongo_auth=false  
  14. $MONGO["servers"][$i]["mongo_auth"] = TRUE;//enable mongo authentication?  
  15.   
  16. $MONGO["servers"][$i]["control_auth"] = true;//enable control users, works only if mongo_auth=false  
  17. $MONGO["servers"][$i]["control_users"]["admin"] = "admin";//one of control users ["USERNAME"]=PASSWORD, works only if mongo_auth=false  
  18.   
  19. $MONGO["servers"][$i]["ui_only_dbs"] = "";//databases to display  
  20. $MONGO["servers"][$i]["ui_hide_dbs"] = "";//databases to hide  
  21. $MONGO["servers"][$i]["ui_hide_collections"] = "";//collections to hide  
  22. $MONGO["servers"][$i]["ui_hide_system_collections"] = false;//whether hide the system collections  
  23.   
  24. //$MONGO["servers"][$i]["docs_nature_order"] = false;//whether show documents by nature order, default is by _id field  
  25. //$MONGO["servers"][$i]["docs_render"] = "default";//document highlight render, can be "default" or "plain"  
  26.   
  27. $i ++;  

 

这样,rockmongo可以自动查询登陆信息是否正确了。

另外 mongo_host 和 mongo_port 都可以在 /etc/mongodb.conf 文件中找到,下面是我个人的截图:

Selection_063

转载于:https://www.cnblogs.com/zzw1787044/p/5773178.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 内置角色 的相关文章

  • 在 PHP 中接受带有小数点和千位分隔符的国际数字

    对于用户可以输入能量值来计算相应费用的在线计算器 我需要 PHP 脚本来接受各种用户输入 200 万又四分之一焦耳 的值可以输入为 2000000 25 默认表示法 2 000 000 25 带千位分隔符 2000000 25 逗号作为小数
  • 使用 MYSQL 将 h:mm pm/am 时间格式插入数据库

    我正在尝试将以 h mm am pm 格式写入的时间插入到存储为标准 DATETIME 格式 hh mm ss 的数据库中 但我不知道如何将发布的时间转换为标准格式所以数据库会接受它 这是我到目前为止一直在尝试的 title POST in
  • 点击 %40 变为 %2540

    当单击包含 符号的链接时 该网址给我 40 这就是我想要的 但是一旦我点击它 一秒钟后它就在我点击后变成了 2540 单击是在电子邮件内 然后定向到网站 其中 40 更改为 2540 我怎样才能让它停止变化 它现在得到这样的参数 email
  • 使用 ImageMagick (PHP) 将 2 个图像并排合并为 1 个图像

    我认为这是一件容易的事 我有 2 张图片 JPG 我希望它们合并成一张图片 其中 2 张图片并排 所以我有图片 A 和图片 B 我想要图片 AB 并排 两个图像具有相同的宽度和高度 在本例中 宽度 200px 高度 300px 但是第二个图
  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • 如何将变量插入 PHP 数组?

    我在网上查了一些答案 但都不是很准确 我希望能够做到这一点 id result id info array id Example echo info 0 这有可能吗 您需要的是 不推荐 info array id Example varia
  • 所有 PHP 相等比较都是对称的吗?

    Is a b总是等价于 b a 我认为在 JavaScript 中 由于强制转换 有一些奇怪的情况并非如此 I think ide https stackoverflow com questions 4752579 are all php
  • 更改 Woocommerce 中“我的帐户”页面上的标题

    我见过大量有关如何使用 WooCommerce 我的帐户仪表板重新排序 更改导航和页面的示例 但我一生都无法弄清楚如何更改每个部分的主要标题 我的帐户 订单 下载 地址等 我已经搜索过模板 但没有任何乐趣 我尝试使用条件 php 注释来回显
  • Laravel Auth:attempt() 不会持久登录

    我在网上找到了许多有类似问题的资源 但似乎没有一个解决方案可以解决我的问题 当我使用以下代码登录用户时 一切看起来都很好 email Input get email password Input get password if Auth a
  • laravel - 使用请求类或输入类

    在宁静的控制器中 我应该使用哪个类来获取传递的变量 member gt email Input get email or member gt email Request get email 两种选择都适合我 但有什么区别 Input get
  • 使用 PHP Selenium Webdriver 单击下拉菜单中的选项?

    我正在使用 PHP Selenium Webdriver 包装器Facebook https github com facebook php webdriver 任何人都可以给我一个如何单击或从选择下拉菜单中选择选项的示例吗 我已经尝试过这
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 如何将我的 init 函数中的代码集中到所有控制器中?

    public function init this gt view gt user Zend Auth getInstance gt getIdentity this gt view gt siteName Zend Registry ge
  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • Facebook PHP SDK - 如何获取访问令牌?

    我正在尝试从我的应用程序在用户的 Facebook 墙上发帖 用户授予应用程序在他的墙上发布的权限 并且我在数据库中有用户ID 我需要自动发送帖子 而无需用户再次登录 我的代码是 try require once dirname FILE
  • Codeigniter - 出现 404 Not Found 错误

    我们在 godaddy 有两个托管套餐 我们的实时网站使用以下 htaccess 文件运行良好 无需在 url 中使用 index php 即可访问网站 RewriteEngine On RewriteCond REQUEST FILENA
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • ZF3/2 - 如何捕获 EVENT_DISPATCH 侦听器中引发的异常?

    有什么方法可以在 EVENT DISPATCH 监听器中抛出异常吗 class Module public function onBootstrap EventInterface event application event gt get
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function

随机推荐

  • 小程序中父子组件通信的方法

    引入组件 全局组件 在app json文件中配置usingComponents 多个组件用逗号隔开 最后一个不加逗号 单页面使用的组件 在页面的 json文件中配置usingComponents usingComponents myConp
  • SpringBoot框架实现邮件发送(上)

    文章目录 前言 1 邮件发送类依赖导入 2 配置发件邮箱的信息 3 邮件接收类 4 邮件发送工具类 前言 实现登录注册功能的时候 一些软件总是要手机号验证码或者邮件验证码 手机号验证码功能的实现是需要付费使用的 而且也比较容易搭建 例如阿里
  • 【unity3d】Layers的控制/LayerMask的使用

    文章目录 unity Layers的控制 LayerMask的使用 Layers 概述 演示效果 Layers的设置 gameobject设置Layer 手动设置 代码设置 LayerMask的使用 Camera的culling mask的
  • TypeScript基础学习

    最终还是没有逃过ts的魔爪 哈哈哈也不能说魔爪 工作这段时间 感觉每天都在学习新的知识 最近在看源代码的时候看到了部分源码是用ts写的 之前没接触过 今天就来学习一下ts 文章参考 TypeScript超详细入门教程 TypeScript
  • python练习题3

    1 数列翻转 reverse 问题描述 编写程序对列表中的数据进行翻转转换 即将数组中第一个数和最后一个数交换 第二个数和倒数第二个数交换 依此类推 样例输入 4 100 200 300 400 样例输出 400 300 200 100 a
  • bpython bs4用哪个解释器好_Python之解BS4库如何安装与使用?正确方法教你

    Beautiful Soup 库一般被称为bs4库 支持Python3 是我们写爬虫非常好的第三方库 因用起来十分的简便流畅 所以也被人叫做 美味汤 目前bs4库的最新版本是4 60 下文会介绍该库的最基本的使用 具体详细的细节还是要看 官
  • Cocos2d-android游戏引擎

    什么是游戏引擎 游戏引擎是指一些已编写好的可编辑游戏系统或者一些交互式实时图像应用程序的核心组件 这些系统为游戏设计者提供各种编写游戏所需的各种工具 其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始 Cocos2d家族 coc
  • 数据结构小知识------时间与空间复杂度

    本章思维导图 一 时间复杂度 1 1时间复杂度的概念 什么是时间复杂度呢 时间复杂度其实就是一个程序运行时它的指令运行的次数 在这里 程序默认每条指令的运行时间是一样的 所以时间复杂度就可以理解为是程序内指令的运行次数 说一千道一万 不如来
  • Java 使用EasyExcel解析导入的Excel文件

    最近在做项目时 有遇到需要使用excel导入的场景 以前也有写过使用 Apache poi 来解析导入数据 但整体解析逻辑比较繁琐 封装成工具类后也不是很好用 这个可能是我个人技术原因 和poi无关 这次开发时 在网上找了个更加简洁的方式
  • Python循环控制语句

    Python循环控制语句 生活中循环的例子也很多 例如 听歌的时候进行循环等等 程序中循环的效果和生活中的循环效果相同 Python中的循环是往复的执行某一段代码 结构while循环 初始条件设置 通常是一个计数器 来控制条件表达式是否成立
  • OpenStack nova-compute 报TooOldComputeService版本过低问题

    项目场景 安装openstack的nova compute部分 问题描述 启动nova conductor时报错 查看nova conductor log 发现如下错误 Current Nova version does not suppo
  • android aosp,安卓源码AOSP下载使用的正确姿势

    安卓源码AOSP下载使用的正确姿势 从同步源码到编译完成 整个过程应至少准备200G空间 编译时需要的内存数与编译线程数相关 博主实测比较极限的配置是4核8G 超过这个范围将触发swap交换导致编译速度急剧下降 开始搞 注 以下 号所有内容
  • mac运行ps特别慢_PS CC 2019 太卡,运行特别慢?这几个优化提速技巧我再说一遍...

    只要设置好这几个选项 让你的 PS CC 2019 运行如飞 曾经写过关于PS优化提速的教程 但总有粉丝问我PS很卡很慢 怎么办 所以 这几个核心的 PS 优化提速技巧我再说一遍 先声明一下 我这里讲的优化提速是指你电脑配置足够的情况下PS
  • ​LeetCode刷题实战33:搜索旋转排序数组

    来源 https www cnblogs com techflow p 12441002 html 算法的重要性 我就不多说了吧 想去大厂 就必须要经过基础知识和业务逻辑面试 算法面试 所以 为了提高大家的算法能力 这个公众号后续每天带大家
  • 【Monkey】Android压力测试

    一 简单介绍一下Monkey Monkey工具直接运行在设备或模拟器的adb shell中 生成用户或系统的伪随机事件流 二 Monkey命令 1 adb shell monkey p package 事件数 50 随机完成50个事件 ad
  • Unity架构之域重新加载

    域重新加载 域重新加载将重置脚本状态 默认情况下会启用域重新加载 此功能为您提供了全新的脚本状态 并会在您每次进入运行模式时重置所有静态字段和已注册的处理程序 这意味着每次在 Unity Editor 中进入运行模式时 您的项目就会采用与在
  • pkpm字体库下载_pkpm字体库转到cad

    等级 文件 5MB 格式 rar 五层框架结构PKPM模型 CAD配筋图纸 建筑说明 本工程为唐山市市医院办公大楼 建筑面积约为 4000平方米 本建筑共五层 为框架结构 抗震烈度按8度设防 图纸包括 唐山医院建筑图 CAD配筋图纸以及pk
  • matlab实现以不同信噪比在干净语音信号中叠加噪声

    原理公式 信噪比计算公式 信号功率和噪声功率之比 也是信号幅度和噪声幅度的平方之比 一般情况下我们使用分贝的形式 即单位是dB 其值为对数信号与噪声功率比的十倍 matlab实现代码 function y noise add noise m
  • shopify 前端开发遇到的问题及解决(部分)

    问题 gallery不同部分的小li互相干扰 解决 修复了小li互相干扰的bug 原因 其实不单单需要修改小li的class 并且需要修改小li的控件 也就是是loopli 不然会互相干扰 shopify的section中jQuery能够拿
  • MongoDB 内置角色

    1 数据库用户角色 针对每一个数据库进行控制 read 提供了读取所有非系统集合 以及系统集合中的system indexes system js system namespacesreadWrite 包含了所有read权限 以及修改所有非