理解admin数据库

  安装MongoDB时,会自动创建admin数据库,这是一个特殊的库。有些用户账户角色赋予用户操作多个数据库的权限,而这些用户只能在admin数据库中创建。要创建有权操作所有数据库的超级用户,必须将该用户加入到admin数据库中。检查凭证时,MongoDB将在指定数据库和admin数据库中检查用户账户。

管理用户账户

  在MongoDB shell中,可添加、删除和配置用户。

创建用户账户

  数据库管理的一个重要部分是创建能够管理用户和数据库以及读写数据库的用户账户。

  创建一个数据库新用户用db.createUser()方法,如果用户存在则返回一个用户重复错误。

db.createUser(user, writeConcern) 

  user: 这个文档创建关于用户的身份认证和访问信息。

  writeConcern: 这个文档描述保证MongoDB提供写操作的成功报告。

  user文档,定义了用户的以下形式

    { user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
}

  user文档字段介绍

user

独一无二的用户名

pwd  用户的密码
cusomData 为任意内容,例如可以为用户全名介绍
roles 指定用户的角色,可以用一个空数组给用户设定空角色

   在roles字段,可以指定内置角色和用户定义的角色。

  内置角色(Built-In Roles)

  内置角色是MongoDB预定义的角色,操作的资源是在DB级别上。MongoDB拥有一个SuperUser的角色:root,拥有最大权限,能够执行任意操作。

  数据库用户角色(Database User Roles):

  •   read:授予User用户只读权限
  • readWriter:授予User用户读写权限

  数据库管理角色(Database Administration Riles):

  •   dbAdmin:在当前DB中执行管理操作
  •   adOwner:在当前DB中执行任意操作
  •   userAdmin:在当前DB中管理用户

  集群管理角色(Cluster Administration Roles):

  •   clusterAdmin:授予管理集群的最高权限
  •   clusterManager:授予管理和监控集群的权限
  •   clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限
  •   hostManager:管理Server

  备份恢复角色(Backup and Restoration Roles):

  •   backup
  •   restore

  所有数据库角色(All-Database Roles):

  •   readAnyDatabase:授予在所有数据库上读取数据的权限
  •   readWriterAnyDatabase:授予在所有数据库上读取数据的权限
  •   userAdminAnyDatabase:授予在所有数据库上管理用户的权限
  •   dbAdminAnyDatabase:授予管理所有数据库的权限

  writeConcern文档

  •   w选项:允许的值分别是 1、0、大于1的值、"majority"、<tag set>;
  •   j选项:确保mongod实例写数据到磁盘上的journal(日志),这可以确保mongd以外关闭不会丢失数据。设置true启用。
  •   wtimeout:指定一个时间限制,以毫秒为单位。wtimeout只适用于w值大于1。

  实例

  在admin数据库中创建一个管理员用户。

use admin
db.createUser( { user: "testadmin",
pwd: "",
roles:[ "dbAdmin" ] } );

  如图表示添加成功。

列出用户

  在每个数据库中,用户账户都存储在集合db.system.users中。要获取用户列表,可以使用两种不同的方法。

  方法一:

    切换到要列出其用户账户的数据库,再执行命令show users。

 use admin
show users

  方法二:

    切换到要列出其用户账户的数据库,对集合db.system.users执行find等查询。db.system.users.find()返回一个游标对象,可以用它来访问User文档。

 var cur = db.system.users.find()
cur.count()
cur.toArray()

  如图不光可列出用户,还可调用 count() 方法显示出有几个用户。

删除用户

  要将用户从MongoDB数据库中删除,可使用方法 dropUser(<username>)。

  实例

  删除之前演示中在 admin 数据库中创建的 testadmin。

 use admin
db.dropUser("testAdmin")

配置访问控制

  MongoDB提供了数据库级身份验证和授权,这意味着用户账户存在与单个数据库中。为支持基本的身份验证,MongoDB在每个数据库中都将用户凭证存储在集合system.users中。

  MongoDB安装后,数据库admin中没有任何用户账户,此时MongoDB向从本地主机发起的连接提供全面的数据库管理权限。配置MongoDB时,首先需要创建用户管理员账户和数据库管理员账户。用户管理员账户可在admin和其他数据库中创建用户账户。数据库管理员账户可作为管理数据库、集群、复制和MongoDB其他方面的超级用户。

  注意:

    用户管理员账户和数据库管理员账户都是在admin数据库中创建的。

创建用户管理员账户

  用户管理员应只有创建用户账户的权限,而不能管理数据库或执行其他管理任务。

  用户管理员的角色应为 userAdminAnyDatabase,这可以让用户管理员能够新建用户账户,但不能对数据库执行其他操作。

 use admin
db.createUser( { user: "userAdmin",
pwd:"",
roles: [ "userAdminAnyDatabase" ] } )

启用身份验证

  创建用户管理员账户后,使用参数--auth重启MongoDB服务器,也可在配置文件中指定auth设置。

mongod -dbpath <mongo_data_location>/data/db -auth

  或配置文件

  配置完成后,再想从MongoDB shell访问MongoDB服务器管理用户时,必须向数据库验证身份,不然没有权限管理用户。

   可以执行下面的命令向admin数据库验证身份。

use admin
db.auth("userAdmin","123456")

  或在启动MongoDB shell 时使用选项 --username和--password 向数据库admin验证身份。

 mongo --username "userAdmin" --password ""

创建数据库管理员账户

  数据库管理员的角色应为 readWriteAnyDatabase、dbAdminAnyDatabase 和 clusterAdmin 。这让这名用户能够访问系统中所有数据库、创建新的数据库以及管理MongoDB集群和副本集。

use admin
db.createUser( { user: "dbadmin",
pwd:"",
roles: [ "readWriteAnyDatabase","dbAdminAnyDatabase","clusterAdmin" ] } )

注意:用户管理员没有权限通过MongoDB shell关闭mongod服务器,必须切换到数据库管理员账户才可关闭mongod服务器。

最新文章

  1. [Angularjs]ng-include 包含
  2. union all 简单用法
  3. Nginx加多个tomcat实现负载均衡,动静分离
  4. SR4000(二)
  5. WebLogic(12C)——Server
  6. POJ 3624 01背包
  7. Java进阶(三十) 判断字符串编码类型
  8. Java面向对象(一、封装)
  9. 抓取某网站信息时遇到的问题及解决 The character set provided in ContentType is invalid. Cannot read content as string using an invalid character set
  10. 实时同步到Hbase的优化-1
  11. 解决macOS git clone Azure DevOps提示身份认证失败问题
  12. c# 判断文件是否发生了变化
  13. 为什么.net 4.6.1装了却没看到
  14. 九浅一深ThreadLocal
  15. java设计模式(一)【六大原则】
  16. C++Primer,C++标准IO库阅读心得
  17. 解决Linux 安装python3 .5 解决pip 安装无法成功问题ssl安全拦截无法pip安装库问题
  18. 分割视图控制器(UISplitViewController)
  19. hashlib模块加密用法
  20. 阿里云RDS备份的tar格式包恢复到本地自建数据库

热门文章

  1. Java注解(一):介绍,作用,思想及优点
  2. 【转载】Docker+Kubernetes 干货文章精选
  3. 一文了解 Hadoop 运行机制
  4. 递归一个List&lt;T&gt;,可自己根据需要改造为通用型。
  5. PIC单片机基础2
  6. Java中char,short,int,long占几个字节和多少位
  7. 从零开始学习和改造activiti流程引擎的13天,自己记录一下
  8. 关于单元测试的思考--Asp.Net Core单元测试最佳实践
  9. C# 4.0 的 Visual Studio 2010 示例
  10. Exception: Exception caught in workbook destructor. Explicit close() may be required for workbook. 错误解决办法