MongoDB数据库授权认证的实现

目录
  • 1.与用户相关的命令
  • 2.配置mongodb登陆授权认证
    • 2.1.创建一个用户
    • 2.2.修改配置文件启用用户认证
    • 2.3.重启mongodb
    • 2.4.使用口令登陆mongodb
  • 3.授权用户并赋予多个权限
    • 3.1.创建用户并制造数据
    • 3.2.使用mytest登录test库验证权限
    • 3.3.使用mytest登录test2库验证权限

1.与用户相关的命令

  • db.auth() 将用户验证到数据库。
  • db.changeUserPassword() 更改现有用户的密码。
  • db.createUser() 创建一个新用户。
  • db.dropUser() 删除单个用户。
  • db.dropAllUsers() 删除与数据库关联的所有用户。
  • db.getUser() 返回有关指定用户的信息。
  • db.getUsers() 返回有关与数据库关联的所有用户的信息。
  • db.grantRolesToUser() 授予用户角色及其特权。
  • db.removeUser() 已过时。从数据库中删除用户。
  • db.revokeRolesFromUser() 从用户中删除角色。
  • db.updateUser() 更新用户数据。

2.配置mongodb登陆授权认证

2.1.创建一个用户

> use admin
> db.createUser(
{
   user: "admin",
   pwd: "123456",
   roles: [ { role: "root", db: "admin" } ]			//指定角色为root,表示管理员
}
> db.getUsers()

2.2.修改配置文件启用用户认证

[mongo@mongodb-1 ~]$ vim /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml
security:
  authorization: enabled

2.3.重启mongodb

[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml --shutdown
killing process with pid: 17899
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml
about to fork child process, waiting until server is ready for connections.
forked process: 18511
child process started successfully, parent exiting

2.4.使用口令登陆mongodb

[mongo@mongodb-1 ~]$ mongo -uadmin -p123456
MongoDB shell version v4.0.14
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ae65176e-ac6b-4906-b621-496996381417") }
MongoDB server version: 4.0.14
> show dbs

使用口令登陆后会发现最后一个警告信息也会消失

3.授权用户并赋予多个权限

mongodb可以创建多个用户并针对不同的库进行不同的操作

3.1.创建用户并制造数据

1.创建用户
[mongo@mongodb-1 ~]$ mongo -uadmin -p123456
> db.createUser(
...   {
...     user: "mytest",
...     pwd: "123456",
...     roles: [ { role: "readWrite", db: "test" },		//可读可写
...              { role: "read", db: "test2" }   ]					//可读
...   }
... )

2.插入数据
test库
> use test
> db.test.insert({"name":"xiaoming","age":10})
> db.test.insert({"name":"xiaohong","age":10})
> db.test.insert({"name":"xiaolan","age":10})

test2库
> use test2
> db.test2.insert({"name":"jiangxl","job":"it","age":"99"})
> db.test2.insert({"name":"wanger","job":"it","age":"99"})

3.2.使用mytest登录test库验证权限

1.登录mytest用户并连接到tets库
[mongo@mongodb-1 ~]$ mongo -umytest -p123456 192.168.81.210:27017/test

2.查看所有表
> show tables
hash
test

3.查看是否有读权限
> db.test.find()
{ "_id" : ObjectId("602c73b5d9d09b9b700c9eb2"), "name" : "xiaoming", "age" : 10 }
{ "_id" : ObjectId("602c73bdd9d09b9b700c9eb3"), "name" : "xiaohong", "age" : 10 }
{ "_id" : ObjectId("602c73c1d9d09b9b700c9eb4"), "name" : "xiaolan", "age" : 10 }

4.查看是否有写入权限
> db.test.insert({"name":"xiaozhang","age":10})

5.查看是否写入成功
> db.test.find()
{ "_id" : ObjectId("602c73b5d9d09b9b700c9eb2"), "name" : "xiaoming", "age" : 10 }
{ "_id" : ObjectId("602c73bdd9d09b9b700c9eb3"), "name" : "xiaohong", "age" : 10 }
{ "_id" : ObjectId("602c73c1d9d09b9b700c9eb4"), "name" : "xiaolan", "age" : 10 }
{ "_id" : ObjectId("602c74f949b9d3f400ed866b"), "name" : "xiaozhang", "age" : 10 }

可读可写

3.3.使用mytest登录test2库验证权限

由于普通用户只能登录test库因此想要切换其他库,只能是登陆test库后使用use进行切换

1.登录test库
[mongo@mongodb-1 ~]$ mongo -umytest -p123456 192.168.81.210:27017/test

2.切换到tets2库
> use test2

3.查看表
> show tables
test2

4.查看表中数据
> db.test2.find()

5.插入一条数据,查看是否插入成功
> db.test2.insert({"name":"xiaozi","job":"it","age":"99"})
WriteCommandError({
	"ok" : 0,
	"errmsg" : "not authorized on test2 to execute command { insert: \"test2\", ordered: true, lsid: { id: UUID(\"6203f7df-d8f8-4880-aab3-4db712ae785f\") }, $db: \"test2\" }",
	"code" : 13,
	"codeName" : "Unauthorized"
})

可以看到只能读取,不能插入

到此这篇关于MongoDB数据库授权认证的实现的文章就介绍到这了,更多相关MongoDB数据库授权认证内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mongodb 3.4下远程连接认证失败的解决方法

    前言 mongodb开启或者关闭授权功能时还是挺麻烦的,需要新建服务键入mongod --auth.为了方便,我这里是建了两个服务,用到哪个就切换至哪个服务. --需要授权 mongod --logpath "D:\data\log\mongodb.log" --logappend --dbpath "D:\data\db" --auth --serviceName "MongoDBService" --serviceDisplayName &q

  • 基于Docker的MongoDB实现授权访问的方法

    基于Docker部署一个数据库实例通常比直接在服务器上安装数据库还要简单,Gevin在开发环境中经常使用基于docker的数据库服务,docker也渐渐成为Gevin在Linux上安装MongoDB的首选方式,由于MongoDB默认是不用通过认证就能直接连接的,出于安全考虑,在公网上部署MongoDB时,务必设置authentication机制,以避免类似 "黑客赎金" 问题的发生. 那么,基于Docker拉起的MongoDB,如何实现通过用户名密码访问指定数据库呢?方法很简单,但前提

  • MongoDB开启权限认证的方法步骤详解

    前言 最近在生产环境中MongoDB已经使用有一段时间了,但对于MongoDB的数据存储一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),最近在酷壳网看了一篇技术文章(https://coolshell.cn/?s=从+MONGODB+"赎金事件"+看安全问题&from=timeline&isappinstalled=0)介绍的mongodb未开启权限认证导致数据被黑客窃取,要比特币赎回的事件,考虑到数据安全的原因特地花了一点时间研究了一下,我现在用的版

  • 浅析MongoDB之安全认证

    一.MongoDB的用户和角色权限简介 为了强制开启用户访问控制(用户验证),则需要在MongoDB实例启动时使用选项--auth或在指定启动配置文件中添加auth=true. 启用访问控制:MongoDB使用的是基于角色的访问控制(Role-Based Access Control,RBAC)来管理用户对实例的访问.通过对用户授予一个或多个角色来控制用户访问数据库资源的权限和数据库操作的权限,在对用户分配角色之前,用户无法访问实例. 角色:在MongoDB中通过角色对用户授予相应数据库资源的操

  • 关于Mongodb 认证鉴权你需要知道的一些事

    前言 本文主要给大家介绍了Mongodb认证鉴权的一些相关内容,通过设置认证鉴权会对大家的mongodb安全进一步的保障,下面话不多说了,来一起看看详细的介绍吧. 一.Mongodb 的权限管理 认识权限管理,说明主要概念及关系 与大多数数据库一样,Mongodb同样提供了一套权限管理机制. 为了体验Mongodb 的权限管理,我们找一台已经安装好的Mongodb,可以参照这里搭建一个单节点的Mongodb. 直接打开mongo shell: ./bin/mongo --port=27017 尝

  • Mongodb 3.2.9开启用户权限认证问题的步骤详解

    前言 大家在Mongodb安装好后,一般不需要用户名密码就可以直接使用,开发者认为只要使用环境足够安全,可以不使用认证,但是在实际使用中为了数据的安全,大多人还是选择了开启权限认证. 一.在老版的Mongodb(大概3.0以前)可以这样开启认证: 1.Linux环境下mongo shell方式认证: >show dbs ##看到有如下数据 admin (empty) comment 0.203125GB dbtest (empty) foo 0.203125GB local (empty) te

  • Java开发之spring security实现基于MongoDB的认证功能

    本文实例讲述了Java开发之spring security实现基于MongoDB的认证功能.分享给大家供大家参考,具体如下: spring security对基于数据库的认证支持仅限于JDBC,而很多项目并非使用JDBC,比如Nosql数据库很多使用的是 Mongo Java Driver,这样就无法用默认的<jdbc-user-service>进行支持认证. 如果项目不是使用JDBC,没么解决办法就是:自己定义一个认证服务. 新建一个CustomUserDetailsService类 这个类

  • python连接mongodb密码认证实例

    如下所示: from pymongo import MongoClient #建立和数据库系统的连接,指定host及port参数 client = MongoClient('localhost', 27017) #连接mydb数据库,账号密码认证 db = client.mydb db.authenticate("account", "password") #连接表 collection = db.myset #查看全部表名称 db.collection_names

  • MongoDB安全及身份认证(实例讲解)

    前面的话 本文将详细介绍MongoDB安全相关的内容 概述 MongoDB安全主要包括以下4个方面 1.物理隔离 系统不论设计的多么完善,在实施过程中,总会存在一些漏洞.如果能够把不安全的使用方与MongoDB数据库做物理上的隔离,即通过任何手段都不能连接到数据库,这是最安全的防护.但,通常这是不现实的.一些重要的数据可能会保存下来,放置到物理隔离的机房中 2.网络隔离 许多公司的开发机处于内网环境中.即使数据库存在漏洞,外部环境也没有机会利用,因为根本无法访问内网 3.防火墙隔离 可以利用防火

  • MongoDB数据库授权认证的实现

    目录 1.与用户相关的命令 2.配置mongodb登陆授权认证 2.1.创建一个用户 2.2.修改配置文件启用用户认证 2.3.重启mongodb 2.4.使用口令登陆mongodb 3.授权用户并赋予多个权限 3.1.创建用户并制造数据 3.2.使用mytest登录test库验证权限 3.3.使用mytest登录test2库验证权限 1.与用户相关的命令 db.auth() 将用户验证到数据库. db.changeUserPassword() 更改现有用户的密码. db.createUser(

  • SpringSecurity数据库进行认证和授权的使用

    目录 一.准备工作 1.1 导入相关依赖 1.2 配置信息 1.3 数据库准备 1.4 实体类的创建 1.5 Dao层的创建 1.6 Service层的编写 1.7 Security配置 1.8 密码加密 1.9 测试结果 在前面的文章中,我们介绍了Spring Security基于内存的一些基本使用方法,但在真实的业务场景中,用户的账号.密码以及角色信息肯定都是存放在数据库中的,所以我们需要从数据库中来加载认证和授权的数据. 一.准备工作 如下案例是基于上一篇中的案例改造而来,所以建议先阅读前

  • Spring Security使用数据库登录认证授权

    目录 一.搭建项目环境 1.创建 RBAC五张表 2.创建项目 二.整合 Spring Security实现用户认证 1.后端整合 2.前端整合 三.整合 Spring Security实现用户授权 1.后端 2.前端 一.搭建项目环境 1.创建 RBAC五张表 RBAC,即基于角色的权限访问控制(Role-Based Access Control),就是用户通过角色与权限进行关联.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系. 在 MySQL数据库中,创建如下几个表: D

  • MongoDB数据库用户角色和权限管理详解

    查看数据库 使用终端命令行输入 mongo 登陆 mongodb 之后切换到 admin 库,并认证后可查看所有数据库,操作如下所示: [root@renwole.com ~]# mongo MongoDB shell version v4.4.0 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id&

  • MongoDB数据库权限管理详解

    前几天网友问MongoDB数据库权限方面的问题.当时大致的了解了一下,这周仔细了解了一下.对于一个数据库不可能随意的访问,肯定要有写访问限制. 在了解这个之前首先熟悉下shell客户端.打开shell客户端的方法:mongo.关闭数据库引擎的话可以使用db.shutdownServer(). 一.shell命令 MongoDB的shell提供了一些命令,可以从shell提示符执行它们. help<option>:用于为MongoDB的shell命令显示语法帮助.option参数允许指定你想得到

  • SpringBoot+SpringSecurity实现基于真实数据的授权认证

    (一)概述 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架,Spring Security主要做两个事情,认证.授权.我之前写过一篇关于SpringSecurity的博客,但是当时只是介绍了基于mock数据的案例,本期就来介绍一下基于真实数据的认证授权实现. (二)前期项目搭建 为了更好的展示SpringSecurity,我们先搭建一个简单的web项目出来.引入thymeleaf依赖 <dependency> <groupId>org.spring

  • 使用Djongo模块在Django中使用MongoDB数据库

    目录 一.安装与配置 二.定义模型 三.生成模型 四.访问Django Admin 五.操作数据 六.最后 一.安装与配置 Djongo的项目官方地址为:https://nesdis.github.io/djongo/,我们可以通过pip命令直接安装djongo: pip install djongo 在安装完成之后,我们就可以直接在Django中配置MongoDB数据库的信息了. 在正常情况下,我们的Django项目中数据库在settings.py文件中进行配置,其一般配置如下所示: DATA

随机推荐