Mongoose:使用一个用户的管理员权限在不同的 Mongo 数据库上进行身份验证

Mongoose: authenticate onto different Mongo-databases with admin-priviliges of one user

我有一个服务器运行 MongoDB。我设置了一个 admin 数据库和一个对所有数据库都有读写权限的用户 (readWriteAnyDatabase)。此外,我在 mongod.conf (security: authorization: "enabled") 中启用了必需的授权。服务器也有ssh.

现在我正尝试使用 mongoosetunnel-ssh:

从我的笔记本电脑访问该数据库
const mongoose = require("mongoose");
const fs = require("fs/promises");
const tunnel = require("tunnel-ssh");

const sshConfig = {
  username: "<USERNAME_ON_SERVER>",
  host: "<IP_ADDRESS>",
  agent: "pageant",
  privateKey: await fs.readFile("C:\Users\<USER_NAME>\.ssh\id_rsa"),
  port: 22,
  dstPort: 27017,
  passphrase: "<SSH-PASSPHRASE>"
};

let sshConnection;
try {
  sshConnection = await new Promise((resolve, reject) => tunnel(sshConfig, (error, server) => {
  if (error)
    reject(error);
  else
    resolve(server);
  }));
} catch (err) {
  console.log("SSH connection error:", err);
}

const mongoDB = mongoose.createConnection("mongo://adminName:adminPassword@localhost:27017/admin?retryWrites=true&w=majority", { 
  useUnifiedTopology: true, 
  useNewUrlParser: true ,
  useFindAndModify: false,
  useCreateIndex: true 
});

try {
  await new Promise(resolve => mongoDB.once("open", resolve));
} catch (err) {
  console.error("Error while connecting to mongoDB", err);
}

mongoDB.on("error", error => console.error("MongoDB-Error", error));

连接到第一个 admin 数据库工作正常。我可以用我的模型读写这个数据库。

我的问题是是否可以在 mongoose 中创建其他新数据库。

如果我尝试用新名称替换数据库 URI 中的 /admin,我会收到身份验证错误。

我知道我可以事先在服务器上创建并授予对数据库的访问权限,但我更希望能够按代码添加新数据库。

最后,我想到了禁用服务器授权的选项,这样我就可以在不需要用户的情况下访问所有数据库。因为我还有 ssh 加密,所以用户密码身份验证真的是必要的吗?

如果用户是在 admin 数据库中创建的,但您想使用 URI 连接到其他数据库,则需要在 URI 中指定 authSource 以便找到正确的用户帐户。

"mongo://adminName:adminPassword@localhost:27017/otherdb?authSource=admin&retryWrites=true&w=majority"