Mongo权限认证

定义:
创建一个数据库新用户用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(内置角色):
    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root  

    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
    7. 内部角色:__system

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


   1、服务端

          mongod --dbpath D:\MongoDB\data\          ---------------------这是不加用户验证的服务端启用,测试用admin和test用户登陆都可以新增数据库,插入数据库数据

          mongod --dbpath D:\MongoDB\data\ --auth      --------------------加数据库验证的服务端启用。

   2、管理员

         2.1、建立

[html]  view plain  copy
  1.     >use admin  
  2.     > db.createUser({user:'dy',pwd:'123',roles:['userAdminAnyDatabase','dbAdminAnyDa  
  3. tabase']}  
       建完以后会在admin数据库下看到一个system.users的集合,db.system.users.find()打开集合可以看到新建的用户

        2.2、登陆后,需到如下才能验证  ----------------------------------如果是给某个库建立的,需要到那个库下验证才行。

[html]  view plain  copy
  1. > use admin  
  2. switched to db admin  
  3. > db.auth("dy","123")  
  4. 1  
       2.3、所建的管理员只能管理用户,查看数据库,查看数据库内的集合,却不能查看和操作集合内的详细内容。
  3、超级管理员

       3.1、建立   

[html]  view plain  copy
  1. db.createUser({user:"NO1",pwd:"123",roles:["root"]})  
      3.2、登陆
[html]  view plain  copy
  1. > use admin  
  2. switched to db admin  
  3. > db.auth("NO1","123")  
  4. 1  
      3.3、这个管理员有全部的全限,可以管理用户,查看数据库,查看数据库内的集合,详细内容,并且还可以对任何库增删查

  4、单数据库读写

      4.1、建立

[html]  view plain  copy
  1. db.createUser({user:"dy11",pwd:"123",roles:[{role:"readWrite",db:"text1"}]})  
     4.2、登陆

[html]  view plain  copy
  1. > use text1  
  2. switched to db text1  
  3. > db.auth("dy11","123")  
  4. 1  
    4.3、只能对text1库里的集合,及集合中的内容进行增删改查

 5、单数据库读写 

    5.1、建立

[html]  view plain  copy
  1. db.createUser({user:"dy11",pwd:"123",roles:[{role:"read",db:"text1"}]})  

   5.2、登陆
[html]  view plain  copy
  1. > use text2  
  2. switched to db text2  
  3. > db.auth("text2","123")  
  5.3、只对text2库里的集合可以读

6、多数据库读写

   6.1、建立

[html]  view plain  copy
  1. > db.createUser({user:"text3",pwd:"123",roles:[{role:"readWrite",db:"text3"},{ro  
  2. le:"readWrite",db:"text4"}]})  

  6.2、登陆

[html]  view plain  copy
  1. > use text3  
  2. switched to db text3  
  3. > db.auth("text3","123")  
  4. 1  
  6.3、可以对text3、text4进行操作

7、修改密码

[html]  view plain  copy
  1. use admin  
  2. db.changeUserPassword("username", "xxx")  
8. 查看用户信息

db.runCommand({usersInfo:"userName"})
9、修改密码和用户信息

[html]  view plain  copy
  1. db.runCommand(  
  2.   {  
  3.     updateUser:"username",  
  4.     pwd:"xxx",  
  5.     customData:{title:"xxx"}  
  6.   }  
  7. )  

备注:

1. 和用户管理相关的操作基本都要在admin数据库下运行,要先use admin;

2. 如果在某个单一的数据库下,那只能对当前数据库的权限进行操作,验证也在那某个库下。

3、多用户权限之间切换的次数多了,可能权限会乱掉,最好重开,不要多次切换。

4、原先看网上说的,单个库用户会在单个某下面的system.user的集合,但实际这个版本都是在admin库下的system.user



猜你喜欢

转载自blog.csdn.net/wangjia55/article/details/78182673