我有一个应用场景,其中3个流媒体应用程序正在使用mongo数据库复制集。分配一台机器来运行每个流星应用程序。每台计算机上都运行一个mongo数据库。每个应用程序(服务器)都应该访问本地mongo数据库中的集合。
服务器创建与本地数据库集合的连接,如下所示:
const url = "myUser:myPass@localhost:27017/local?authSource=admin"
const MyCollection = new Mongo.Collection('myCollection', { _driver: new MongoInternals.RemoteCollectionDriver(url) });
3个流星应用程序中的2个,即连接到主数据库和辅助数据库的应用程序能够读取/写入集合。
然而,连接到仲裁数据库的流星应用程序在尝试在流星启动函数中执行以下代码时会遇到问题:
MyCollection.update({}, { $unset: { myData1: '', myData2: '' }}, { upsert: true });
它产生以下异常:
not authorized on local to execute command { find: "myCollection", filter: {}, limit: 1 }
我可以使用url变量中声明的URL连接到mongo shell,并对本地数据库中的同一个集合执行读写操作。
当我检查用户权限时,这是我在mongo shell中看到的:
{
"_id" : "admin.myUser",
"user" : "myUser",
"db" : "admin",
"roles" : [
{
"role" : "readWrite",
"db" : "meteorDB"
},
{
"role" : "readWrite",
"db" : "local"
},
{
"role" : "read",
"db" : "admin"
},
{
"role" : "clusterAdmin",
"db" : "admin"
}
]
}
因此,看起来好像用户具有正确的权限。
此外,如果我禁用mongo数据库安全性,那么流星应用程序不会抛出任何异常。
我想知道是否有人可以指出我做错了什么。非常感谢任何帮助。