首页 > 学院 > 开发设计 > 正文

Mongodb3.x 权限控制

2019-11-06 06:33:26
字体:
来源:转载
供稿:网友
[plain] view plain copy<span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">MongoDB 3.2 配置 用户认证 和 角色总结</span>  

1安装 MongoDB 3.2

官网上详细的流程走走就ok

https://docs.mongodb.com/master/tutorial/install-mongodb-on-Ubuntu

2MongoDB 如果不配置登陆的情况是等于游客也是超级管理员的,但默认不支持外链接的

3基本的角色 

userAdminAnyDatabase 这个角色拥有分配角色和用户的权限,但没有查写的缺陷
root  这是超级管理员
readWrite  有读写权限
read    有读权限

[plain] view plain copyroot@iZ28ec5minyZ:~# mongo  MongoDB shell version: 3.2.6  connecting to: test  Server has startup warnings:   2016-06-04T18:43:48.721+0800 I CONTROL  [initandlisten]   2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.  2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'  2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten]   2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.  2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'  2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten]   > show dbs  local  0.000GB  >   

默认mongo 进入的 是 test  ,执行 show dbs ,查看所有数据库 我这新安装的就 一个 local db

现在新建一个数据库 admin 用来保存 新建的userAdminAnyDatabase角色 用户(这个相当于人事部长啊)

[plain] view plain copy> use admin  switched to db admin  > db  admin  有一个要注意的是我在那个数据库创建的用户就保存在哪个数据库,像我现在在 db 输出 admin,那我的用户就保存在admin 数据库。

创建人事部管理员 master

[html] view plain copy> db.createUser({user:"master",pwd:"123456",roles:[{"role":"userAdminAnyDatabase","db":"admin"}]})  Successfully added user: {          "user" : "master",          "roles" : [                  {                          "role" : "userAdminAnyDatabase",                          "db" : "admin"                  }          ]  }  > show dbs  admin  0.000GB  local  0.000GB  >   

4配置mongodb

配置前先关闭mongodb

执行   service mongod stop (ubuntu 等系统) 没有service 的系统如(Mac)执行 killall mongod

进入配置文件

(ubuntu 为例子)  vi /etc/mongod.conf

修改 bindip : 0.0.0.0

允许所有IP链接,外链

5 认证模式开启

[plain] view plain copymongod -f /etc/mongod.conf --fork --auth  -f 是使用的配置文件  (--config)也可以

-fork 是 后台服务运行

-auth 必须认证才能操作

6登陆到mongodb

[plain] view plain copyroot@iZ28ec5minyZ:/var/lib# mongo  MongoDB shell version: 3.2.6  connecting to: test  > show dbs  2016-06-04T20:29:20.205+0800 E QUERY    [thread1] Error: listDatabases failed:{          "ok" : 0,          "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",          "code" : 13  } :  _getErrorWithCode@src/mongo/shell/utils.js:25:13  Mongo.PRototype.getDBs@src/mongo/shell/mongo.js:62:1  shellHelper.show@src/mongo/shell/utils.js:760:19  shellHelper@src/mongo/shell/utils.js:650:15  @(shellhelp2):1:1    >   现在没有权限了执行任何操作了,当然你能进入 终端

登陆

[plain] view plain copy> use admin  switched to db admin  > db.auth("master","123456")  1  >   

这里面要注意的是你在那注册用户的要去那个db里认证,就像我是testdb数据库createUser的,那我先要use testdb

在去db.auth("userName","passWord")

现在去创建用户了

[plain] view plain copy> db.auth("master","123456")  1  > db.createUser({user:"jimb55",pwd:"123456",roles:[{"role":"readWrite","db":"jimb55db"}]})  Successfully added user: {          "user" : "jimb55",          "roles" : [                  {                          "role" : "readWrite",                          "db" : "jimb55db"                  }          ]  }  >   jimb55db 是我之前创建的一个db,现在我用master给这个db新建了用户jimb55 role是 readWrite(读写权限)

db 作用的表(这个不是保存用户和用户认证的表,当前的表时admin,jimb55被保存到admin,下次登陆也是在admin登陆,当然你可以 use jimb55db 转换到 jimb55db 后再运行 db.createUser({...}) ,那么下次就可以再jimb55db登陆也没问题)

现在创建成功,看看有认证看看

exit 退出终端 再次 mongo 进入终端

[plain] view plain copy> use jimb55db  switched to db jimb55db  > db.auth("jimb55","123456")  Error: Authentication failed.  0  > use admin  switched to db admin  > db.auth("jimb55","123456")  1  看,你在jimb55db 认证失败了吧

现在看看对 jimb55db 的读写操作

[plain] view plain copy> use jimb55db  switched to db jimb55db  > db  jimb55db  > db.jimb55test.find()  { "_id" : ObjectId("5752cb4cba5ab543f74727a5"), "name" : "jimb55" }  > db.jimb55test.insert({name:"jimb55 bTyh"})  WriteResult({ "nInserted" : 1 })  > db.jimb55test.find()  { "_id" : ObjectId("5752cb4cba5ab543f74727a5"), "name" : "jimb55" }  { "_id" : ObjectId("5752cdea305e84a053d6cc83"), "name" : "jimb55 bTyh" }  >   没有问题了吧。当然我们要做到像MySQL那样远程链接操作并且有个可视化的界面

我现在用的是 robomongo,随便百度一下下载一个

但填写资料后发现

认证失败,要注意的是 robomongo 等认证不过,那是mongodb 版本错了,这里要执行命令校正mongodb、版本

先退出 mongod 服务

killall mongod 

再在无认证情况下打开 mongod

mongod -f /etc/mongod.conf --fork

进入终端:mongo

[plain] view plain copy> use admin  switched to db admin  > db.dropUser("jimb55")  true  > db.system.version.update({ "_id" : "authSchema"},{$set: {"currentVersion" : 3} })   WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })  > db.createUser({user:"jimb55",pwd:"123456",roles:[{"role":"readWrite","db":"jimb55db"}]})  Successfully added user: {          "user" : "jimb55",          "roles" : [                  {                          "role" : "readWrite",                          "db" : "jimb55db"                  }          ]  }  >   换成版本3了,进入admin 删除用户,更改版本version号码,再重新创建用户

退出mongo ,killall mongod  ,再在认证模式打开mongod

mongod -f /etc/mongod.conf --fork --auth

现在再进入 robomongodb 看看


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表