MongoDB 3.6初步(创建管理员、常用命令、角色、权限)

  • 创建管理员

  1. Start MongoDB without access control.
    先启动MongoDB服务:

D:\MongoDB\bin>net start MongoDB

mongod –port 27017 –dbpath …/data

  1. Connect to the instance.然后连接实例:

D:\MongoDB\bin>mongo

  1. Create the user administrator (in the admin authentication database).
> use admin
switched to db admin
> db.createUser( 
  { 
    user:"admin", 
    pwd:"password", 
    roles: [ { role:"userAdminAnyDatabase", db:"admin" } ]   
  } 
)
Successfully added user: {
        "user" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}
  1. Re-start the MongoDB instance with access control.

D:\MongoDB\bin>mongod –auth –port 27017 –dbpath ../data

  1. Connect and authenticate as the user administrator. 然后验证权限是否生效
D:\MongoDB\bin>mongo --port 27017 -u "admin" -p "gaoziqingno1#" --authenticationDatabase "admin"
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.6.3
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> use admin
switched to db admin
> db.auth('admin','password')
1
  1. Create additional users as needed for your deployment (in the test authentication database).
use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)
  1. Connect and authenticate as myTester.

mongo –port 27017 -u “myTester” -p “xyz123” –authenticationDatabase “test”

  • 常用命令

> show dbs  #显示数据库列表 
> show collections  #显示当前数据库中的集合(类似关系数据库中的表)
> show users  #显示用户
> use <db name>  #切换当前数据库,如果数据库不存在则创建数据库。 
> db.help()  #显示数据库操作命令,里面有很多的命令 
> db.foo.help()  #显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 
> db.foo.find()  #对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) 
> db.foo.find( { a : 1 } )  #对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

> db.dropDatabase()  #删除当前使用数据库
> db.cloneDatabase("127.0.0.1")   #将指定机器上的数据库的数据克隆到当前数据库
> db.copyDatabase("mydb", "temp", "127.0.0.1")  #将本机的mydb的数据复制到temp数据库中
> db.repairDatabase()  #修复当前数据库
> db.getName()  #查看当前使用的数据库,也可以直接用db
> db.stats()  #显示当前db状态
> db.version()  #当前db版本
> db.getMongo()  #查看当前db的链接机器地址
> db.serverStatus()  #查看数据库服务器的状态
  • 角色

内建的角色
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色:__system

角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

  • 权限

  1. MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
  2. 切换到admin数据库,添加的账号才是管理员账号。
  3. 用户只能在用户所在数据库登录,包括管理员账号。
  4. 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。

参考文章:
StackOverflow
如何对MongoDB 3.2.7进行用户权限管理配置

    原文作者:Observer_____
    原文地址: https://www.jianshu.com/p/f94f1306ce1b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞