mongodb使用使用 SCRAM 验证客户端设置访问控制

本文指导如何启动无访问控制的MongoDB实例,然后创建用户管理员,赋予userAdminAnyDatabase和readWriteAnyDatabase角色。接着介绍如何创建自定义角色,如manageOpRole和mongostatRole,并修改角色权限。这些步骤对于确保数据库的安全性和管理权限至关重要。
摘要由CSDN通过智能技术生成

1、在没有访问控制的情况下启动 MongoDB

启动没有访问控制的mongodb实例,打开终端并以mongod用户身份运行以下命令:

mongod --port 27017 --dbpath /var/lib/mongodb

若是按照我前几篇的步骤来的,则查看数据库是否启动即可。

2、连接到实例

mongosh --port 27017

3、创建用户管理员

切换到admin库
创建具有 userAdminAnyDatabase和 readWriteAnyDatabase角色的用户

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: passwordPrompt(), // or cleartext password
    roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
      { role: "readWriteAnyDatabase", db: "admin" }
    ]
  }
)

以上代码运行后会提示输入密码,输入即可。

myUserAdmin用户具有的权限:

创建用户
授予或撤销用户的角色
创建或修改自定义角色
读写任何数据库
管理和操作任何数据库

说明白点,他就是超级管理员root

4、重启数据库

5、以用户管理员的身份连接

连接后验证

mongosh --port 27017
use admin
db.auth("myUserAdmin", passwordPrompt()) // or 直接将passwordPrompt()替换为密码

连接时认证

mongosh --port 27017  --authenticationDatabase \
    "admin" -u "myUserAdmin" -p

6、创建自定义角色

管理操作角色

db.createRole(
   {
     role: "manageOpRole", 
     privileges: [
       { resource: { cluster: true }, actions: [ "killop", "inprog" ] },
       { resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
     ],
     roles: []
   }
)

新角色授予终止任何操作的权限。(该权限使用要注意)

要运行的角色

db.createRole(
   {
     role: "mongostatRole", 
     privileges: [
       { resource: { cluster: true }, actions: [ "serverStatus" ] }
     ],
     roles: []
   }
)

该角色可以操作集群

7、修改角色权限

确定用户的角色和权限
要显示要修改的用户的角色和权限,可以使用 db.getUser()和db.getRole()方法。

例子:(查看reportsUser在reporting库中的角色)

use reporting
db.getUser("reportsUser")

要为该角色授予reporting的数据库权限 readWrite:

use reporting
db.getRole( "readWrite", { showPrivileges: true } )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timi先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值