MongoDB之快速设置用户认证和权限

·MongoDB

安装MongoDB,详细教程见官方文档Install MongoDB,本人使用Ubuntu20.04以及mongo 6。文档有详细步骤,此文只说明如何快速授予角色密码的登录。

默认安装完毕并设置启动后,是不允许远程客户端连接的。此时需要关闭MongoDB服务,去mongo.conf配置文件中设置远程连接,如:

net:
  port: 27017
  bindIp: 127.0.0.1
  ipv6: true
  bindIpAll: true
“bindIpAll”标明开放所有客户端ipv4的连接,“ipv6: true”标识开放ipv6的连接。你也可以跳过我的此种设置,在“bindIp”中指明特定的远端ip地址连接。

此时重启MongoDB。注意:你需要开放特定的27017端口。在第三方客户端,如navicat中可以不用指定任何密码直接连接MongoDB服务器。因此,我们必须开启身份验证。

输入“mongosh”进入服务,然后输入命令创建一个具有超级管理员(root)角色的用户,超级管理员具有以下内置角色的操作:
  • readWriteAnyDatabase
  • dbAdminAnyDatabase
  • userAdminAnyDatabase
  • clusterAdmin
  • restore
  • backup
因此它可以读写操作所有的db。以下命令将创建root,若你只需要一个仅能操作具体db的用户,请跳过此步:
use admin
db.createUser(
   {
     user: "strongUser",
     pwd: passwordPrompt(),
     roles: [
       { role: "root", db: "admin" }
     ]
   }
 )
然后在交互中输入你想要创建的密码。此"strongUser"将具有操作admin等系统db以及其他普通db的权限。若你需要创建一个用户只具有读写某个db的用户,则:
use bookUser //务必切换到目标db
db.createUser(
   {
     user: "bookUser",
     pwd: passwordPrompt(),
     roles: [
       { role: "readWrite", db: "bookDb" }
     ]
   }
 )
以上命令将创建只具有读写bookDb的用户。注意,你必须切换到要添加用户的那个db,否则你添加的用户将只是存在于当前db(如admin)的user下,这将导致登录用户时必须切换到db为"admin"下进行登录。在"bookDb"下登录将拒绝,因为此db的user列表没有此用户。虽然这样也可以登陆成功且只能操作授予了权限的db,但这容易导致逻辑混乱。同样,你也不能在“bookDb”下尝试登录“strongUser”用户,即使密码正确也将拒绝登录,因为此用户属于“admin”的db中。

最后,重启服务。键入“mongosh”,你将不在具有”show dbs“等访问控制权限。使用"db.auth('admin')",你将获取所有db的操作权限。同样,在第三方客户端时,你需要指定用户和密码,才能成功操作具有对应授权的数据库。否则将报出
command listDatabases requires authentication
的权限错误,证明了验证安全。

来自:计算机系统与软件工具
更新于2022-09-11 23:33:13 发表于2022-09-11 16:10:23


发表您的评论





公元2024年甲辰龍年,平安健康、龍行天下!