Login
网站首页 > 文章中心 > 其它

分布式文档存储数据库之MongoDB访问控制的操作方法

作者:小编 更新时间:2023-10-01 15:30:04 浏览量:320人看过

MongoDB是一款基于文档存储的分布式数据库,由于其高可扩展性和卓越的性能而受到广泛的关注.在实际使用过程中,为了保障数据的安全性,需要进行MongoDB访问控制的操作.本文将详细讲解MongoDB访问控制的操作方法.

前置条件

在进行操作之前,需要满足以下前置条件:

安装MongoDB软件,并启动MongoDB服务.

在MongoDB中创建一个用户,具有admin权限或者root权限.

MongoDB访问控制的基本原理

MongoDB访问控制是通过验证操作的用户来实现的.当一个用户完成登录和验证之后,其拥有的权限将决定其可以执行的操作.

MongoDB的访问控制可以分为两种类型:

基于角色的访问控制(Role-Based Access Control,RBAC):将权限分配给角色,并将角色分配给用户.

基于资源的访问控制(Resource-Based Access Control,RBAC):将权限分配给用户,并指定可以访问的资源.

MongoDB访问控制的操作方法

创建用户


# 使用mongo命令行工具连接MongoDB
mongo

# 切换到admin数据库
use admin

# 创建名为newuser,密码为test,拥有readWriteAnyDatabase角色的用户
db.createUser(
  {
user: "newuser",
pwd: "test",
roles: [ { role: "readWriteAnyDatabase", db: "admin" } ]
  }
)


删除用户

使用db.dropUser()命令可以删除一个用户.以删除名为newuser的用户为例:


# 切换到admin数据库
use admin

# 删除名为newuser的用户
db.dropUser("newuser")


添加用户角色

使用db.grantRolesToUser()命令可以将一个或多个角色授予给指定的用户.以将名为testuser的用户授予readWriteAnyDatabase角色为例:


# 切换到admin数据库
use admin

# 将名为testuser的用户授予readWriteAnyDatabase角色
db.grantRolesToUser("testuser", [ "readWriteAnyDatabase" ])


撤销用户角色

使用db.revokeRolesFromUser()命令可以从指定的用户身上撤销一个或多个角色.以撤销名为testuser的用户对readWriteAnyDatabase角色的访问权限为例:


# 切换到admin数据库
use admin

# 撤销名为testuser的用户对readWriteAnyDatabase角色的访问权限
db.revokeRolesFromUser("testuser", [ "readWriteAnyDatabase" ])


查看用户列表和角色

使用db.getUsers()和db.getRoles()命令可以分别查看当前MongoDB实例上所有已经创建的用户和角色.以查看所有用户为例:


# 切换到admin数据库
use admin

# 查看用户列表
db.getUsers()


应用MongoDB访问控制

MongoDB访问控制可以应用于整个数据库或者单个集合.在创建集合时,可以指定该集合应用的访问控制.


# 切换到test数据库
use test

# 创建需要进行操作的集合
db.createCollection("mycollection")

# 创建名为user1和user2的两个用户,并分别授予读写权限和只读权限
db.createUser(
  {
user: "user1",
pwd: "test1",
roles: [ { role: "readWrite", db: "test" } ]
  }
)

db.createUser(
  {
user: "user2",
pwd: "test2",
roles: [ { role: "read", db: "test" } ]
  }
)

# 给mycollection集合添加读写权限
db.runCommand(
  {
collMod: "mycollection",
privilege: { resource: { db: "test", collection: "mycollection" }, actions: [ "insert", "remove", "update" ] },
roles: [ { role: "readWrite", db: "test" } ]
  }
)

# 给mycollection集合添加只读权限
db.runCommand(
  {
collMod: "mycollection",
privilege: { resource: { db: "test", collection: "mycollection" }, actions: [ "find" ] },
roles: [ { role: "read", db: "test" } ]
  }
)


示例一:使用Robo 3T连接MongoDB,并创建一个新用户

在左侧的导航框中,选择要创建用户的数据库,右键单击并选择"Open Shell"打开命令行工具.

输入以下命令创建一个名为newuser、密码为test、读写数据库admin的用户.


db.createUser(
  {
user: "newuser",
pwd: "test",
roles: [ { role: "readWriteAnyDatabase", db: "admin" } ]
  }
)


示例二:使用Node.js连接MongoDB,并查询集合数据

在Node.js项目中使用npm命令安装MongoDB的官方驱动程序mongodb.


npm install mongodb --save


连接MongoDB,并查询指定集合的数据.


const MongoClient = require('mongodb').MongoClient;

// 连接MongoDB
MongoClient.connect('mongodb://localhost:27017/mydb', function(err, db) {
  if (err) throw err;

  // 指定集合名为customers
  const collection = db.collection('customers');

  // 查询集合中所有文档
  collection.find({}).toArray(function(err, docs) {
if (err) throw err;
console.log(docs);
db.close();
  });
});


总结

本文详细讲解了MongoDB访问控制的操作方法,涵盖创建、删除、添加和撤销用户角色的命令,以及应用MongoDB访问控制的示例操作.在实践中,正确配置MongoDB访问控制是保障数据安全的重要一环.

以上就是土嘎嘎小编为大家整理的分布式文档存储数据库之MongoDB访问控制的操作方法相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章