首页 > 数据库 >mongoDB 3.0 安全权限访问

mongoDB 3.0 安全权限访问

时间:2023-04-15 17:34:41浏览次数:43  
标签:src mongo admin mongoDB db js 3.0 mongodb 权限

mongoDB 3.0 访问控制改了很多,需要你老老实实的去看文档去验证,谷歌百度出来的多半就是错误的。 还需要注意这个参数authenticationMechanisms。

为了兼用2.6版本,我直接指定下面的参数:

setParameter:
  authenticationMechanisms: MONGODB-CR

下面看看如何创建访问控制权限

不使用 —auth 参数,启动 mongoDB

mongodb-linux-i686-3.0.0/bin/mongod -f mongodb-linux-i686-3.0.0/mongodb.conf

此时你 show dbs 会看到只有一个local数据库,那个所谓的admin是不存在的。

mongoDB 没有超级无敌用户root,只有能管理用户的用户 userAdminAnyDatabase。

添加管理用户

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

roles 中的 db 参数是必须的,不然会报错:Error: couldn’t add user: Missing expected field “db”。另外,有很多文章记录的是使用 db.addUser(…) 方法,这个方法是旧版的,3.0中已经不存在,详见:http://docs.mongodb.org/manual/reference/method/js-user-management。

切换到admin下,查看刚才创建的用户:

show users
或
db.system.users.find()
{ "_id" : "admin.buru", "user" : "buru", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "gwVwuA/dXvxgSHavEnlyvA==", "storedKey" : "l2QEVTEujpkCuqDEKqfIWbSv4ms=", "serverKey" : "M1ofNKXg2sNCsFrBJbX4pXbSgvg=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }

怎么关闭 mongoDB?千万不要 kill -9 pid,可以 kill -2 pid 或 db.shutdownServer()

下面使用 —auth 参 数,重新启动 mongoDB:

mongodb-linux-i686-3.0.0/bin/mongod --auth -f mongodb-linux-i686-3.0.0/mongodb.conf

mongodb-linux-i686-3.0.0/bin/mongo
use admin
db.auth("buru","12345678") #认证,返回1表示成功
或
mongodb-linux-i686-3.0.0/bin/mongo -u buru -p 12345678 --authenticationDatabase admin

此时 show collections 报错

2015-03-17T10:15:56.011+0800 E QUERY    Error: listCollections failed: {
  "ok" : 0,
  "errmsg" : "not authorized on admin to execute command { listCollections: 1.0 }",
  "code" : 13
}
  at Error (<anonymous>)
  at DB._getCollectionInfosCommand (src/mongo/shell/db.js:643:15)
  at DB.getCollectionInfos (src/mongo/shell/db.js:655:20)
  at DB.getCollectionNames (src/mongo/shell/db.js:666:17)
  at shellHelper.show (src/mongo/shell/utils.js:625:12)
  at shellHelper (src/mongo/shell/utils.js:524:36)
  at (shellhelp2):1:1 at src/mongo/shell/db.js:643

因为,用户buru只有用户管理的权限。

下面创建用户,用户都跟着库走,创建的用户都是

use tianhe
db.createUser(
 {
   user: "bao",
   pwd: "12345678",
   roles: [
      { role: "readWrite", db: "tianhe" },
      { role: "read", db: "tianhe2" }
   ]
 }
)

查看刚刚创建的用户。

show users

{
  "_id" : "tianhe.bao",
  "user" : "bao",
  "db" : "tianhe",
  "roles" : [
    {
      "role" : "readWrite",
      "db" : "tianhe"
    },
    {
      "role" : "read",
      "db" : "tianhe2"
    }
  ]
}

查看整个mongoDB全部的用户:

use admin
db.system.users.find()

{ "_id" : "admin.buru", "user" : "buru", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "gwVwuA/dXvxgSHavEnlyvA==", "storedKey" : "l2QEVTEujpkCuqDEKqfIWbSv4ms=", "serverKey" : "M1ofNKXg2sNCsFrBJbX4pXbSgvg=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
{ "_id" : "tianhe.bao", "user" : "bao", "db" : "tianhe", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "//xy1V1fbqEHC1gzQqZHGQ==", "storedKey" : "ZS/o54zzl/FdcXLQJ98KdAVTfF0=", "serverKey" : "iIpNYz2Gk8KhyK3zgz6muBt0PI4=" } }, "roles" : [ { "role" : "readWrite", "db" : "tianhe" }, { "role" : "read", "db" : "tianhe2" } ] }

创建完毕,验证一下:

use buru
show collections

2015-03-17T10:30:06.461+0800 E QUERY    Error: listCollections failed: {
  "ok" : 0,
  "errmsg" : "not authorized on buru to execute command { listCollections: 1.0 }",
  "code" : 13
}
  at Error (<anonymous>)
  at DB._getCollectionInfosCommand (src/mongo/shell/db.js:643:15)
  at DB.getCollectionInfos (src/mongo/shell/db.js:655:20)
  at DB.getCollectionNames (src/mongo/shell/db.js:666:17)
  at shellHelper.show (src/mongo/shell/utils.js:625:12)
  at shellHelper (src/mongo/shell/utils.js:524:36)
  at (shellhelp2):1:1 at src/mongo/shell/db.js:643

显然没权限,先auth:

db.auth("bao","12345678")

show collections
news
system.indexes
wahaha

参考

Mongo Shell:http://docs.mongodb.org/v2.2/tutorial/getting-started-with-the-mongo-shell
Enable Access Control:http://docs.mongodb.org/manual/tutorial/enable-authentication
Add a User to a Database:http://docs.mongodb.org/manual/tutorial/add-user-to-database
User Methods:http://docs.mongodb.org/manual/reference/method/js-user-management
Role Methods:http://docs.mongodb.org/manual/reference/method/js-role-managementmongodb 3.0 authentication:http://ibruce.info/2015/03/03/mongodb3-auth/

本文地址:https://www.linuxprobe.com/mongodb-security-access-control.html

标签:src,mongo,admin,mongoDB,db,js,3.0,mongodb,权限
From: https://blog.51cto.com/u_12148962/6192381

相关文章

  • 3.Vue3.0 有什么更新
    1.监测机制的改变3.0将带来基于代理Proxy的observer实现,提供全语言覆盖的反应性跟踪。消除了Vue2当中基于Object.defineProperty的实现所存在的很多限制。2.只能监测属性,不能监测对象检测属性的添加和删除;检测数组索引和长度的变更;支持Map、Set、WeakMap和Weak......
  • usb3.0能插到2.0口用
    usb3.0能插到2.0口用吗的,不过就算插到2.0的口上的话也是只有2.0的传输速率,并不能拥有更快的传输速率,3.0是可以和2.0互相插拔的,还是很方便的。usb3.0能插到2.0口用:答:可以的usb3.0能插到2.0口的,不过速率是一样的,并不会做出改变。我们将3.0插到2.0上的话只有2.0的传输速率。usb......
  • 【流水】2023.04.15
    省选了,省选完了,省选出分了令人意外的是殷教退了当时我,zas,mizuki,2k22,crs都不信但是是真的看到gtm进了似乎kaguya和joke没进最近数学在开排列组合实验的水平也就我当年那样(笑或许比我强不少?不清楚但是格路计数\(\binom{n+m}{m}\)在做学案的时候没一个人会也是真的。期待......
  • usb3.0u盘写入速度多少正常
    usb3.0u盘写入速度达到320mb/s基本上可以算是一个正常的水平读的速度大概为500MB/s,usb3.0相比2.0提升的非常巨大,极大的提高了带宽,而且更好的实现了电源管理。usb3.0u盘写入速度多少正常:答:320MB/s才算正常一般来说usb3.0u盘写入速度达到320Mb/s,才算正常。相较于2.0,3.0提升的空......
  • mongodb基础教程
    知识点理解MongoDB的业务场景,熟悉MongoDB的简介,特点和体系结构,数据类型等.能够通过docker-compose创建并启动mongodb和mongo-express掌握MongoDB基本常用命令实现数据的CRUD掌握MongoDB的索引类型,索引管理,执行计划业务场景传统的关系型数据库(比如My......
  • 访问权限控制
      面向对象的核心思想之一就是封装,只把有限的方法和成员公开给别人,这也是迪米特法则的内在要求,使外部调用方对方法体的实现细节知道得尽可能少。如何实现封装呢?需要使用某些关键字来限制类外部对类内属性和方法的随意访问,这些关键字就是访问权限控制符。  JAVA中的访问权限包......
  • 【水文】角色权限设计
    参考角色权限设计的100种解法最好的权限设计,是先区分功能权限和数据权限若依后台管理系统备注本文章未思考字段权限的实现,仅仅思考了简单的功能权限与数据权限的实现,建议具体参考上面的引用链接进行学习。表结构定义users、rules、roles、user_join_roles表实现功能权......
  • 2023.04.14 定时测试随笔 T2
    T2P1593因子和传送门:洛谷P1593既然要求因子和,那我们就先对\(a\)分解质因数,得:              \(a=p_1^{k_1}+p_2^{k_2}+p_3^{k_3}...+p_n^{k_n}\)所以\(a^b\)质因数分解就会得到:              \(a^b=p_1^{k_1*b}+p_2^{k_2*b}+......
  • 2023.04.14 定时测试随笔 T1
    T1P2170选学霸传送门:洛谷P2170本题考察的是并查集优化背包DP,所以我们通过并查集将\(n\)个点变成\(group\)个连通块,那么每个连通块里面的点要么都选要么都不选,状态\(dp[i]\)定义为可以选\(i\)个学霸且不会抗议,算出所有可能的结果,再枚举\(1\)~\(n\),求出最接近\(m......
  • SpringBoot 整合 MongoDB
    SpringBoot整合MongoDB好久没搞SpringBoot相关的东西勒,但最近看的代码涉及到了这部分,虽然之前没做过也能看懂,但还是从基础开始搞起比较好。准备工作SpringBoot项目创建这个本来都不用说的,SpringBoot创建项目还能不会啊,但因为某些限制,现在用不了专业版IDEA,只能用社区版,......