Mongodb Mongo管理数据库凭据不';无法在服务器上的其他数据库中工作

Mongodb Mongo管理数据库凭据不';无法在服务器上的其他数据库中工作,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,Mongo的文档说明,当启用身份验证时,对于添加到管理数据库的用户,这些用户应该能够访问Mongo中的其他数据库,并在管理数据库级别授予权限 “管理员数据库是唯一的。对管理员数据库具有正常访问权限的用户可以对所有数据库进行读写访问。对管理员数据库具有只读访问权限的用户可以对所有数据库进行只读访问。” 但在使用C#library 1.7.0.4714版进行测试时,情况并非如此。 只有在特定数据库中创建的帐户才能访问该数据库 我已使用连接字符串上的凭据进行了测试 通过在C中的数据库级别显式设置凭据#

Mongo的文档说明,当启用身份验证时,对于添加到管理数据库的用户,这些用户应该能够访问Mongo中的其他数据库,并在管理数据库级别授予权限

“管理员数据库是唯一的。对管理员数据库具有正常访问权限的用户可以对所有数据库进行读写访问。对管理员数据库具有只读访问权限的用户可以对所有数据库进行只读访问。”

但在使用C#library 1.7.0.4714版进行测试时,情况并非如此。 只有在特定数据库中创建的帐户才能访问该数据库

我已使用连接字符串上的凭据进行了测试 通过在C中的数据库级别显式设置凭据#


有人知道这种预期的行为吗?或者可以提出解决方案。

答案已发布在stackoverflow上:)


使用的用户名后面应该有(admin)才能使用该帐户。

这不是mongodb的问题。我相信您可以通过mongodb shell进行如下身份验证:

use admin
db.auth(user, pass)
mongodb://admin(admin):1@localhost:27020/myDb
这是mongodb c#驱动程序的把戏。很久以前,为了理解这一点,我花了一些时间阅读c#驱动程序代码

所以连接字符串应该如下所示:

use admin
db.auth(user, pass)
mongodb://admin(admin):1@localhost:27020/myDb

(admin)
中的诀窍是告诉驱动程序您将通过管理员用户进行身份验证。

还有另一种方法可以通过管理员数据库进行身份验证

缺点是您必须设置整个连接对象,而不是将所有信息单独打包在一个连接字符串上

而不是用连接字符串实例化MongoClient,如

var connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
您可以创建MongoClientSettings对象,设置凭据(以及任何其他连接设置),并实例化传递该对象的客户端

string authenticationDB = "admin"
string authenticationUsername = "user"
string authenticationPassword = "pass"
MongoClientSettings settings = new MongoClientSettings();
settings.Credentials = new[] { MongoCredential.CreateMongoCRCredential(authenticationDB, authenticationUsername, authenticationPassword) };

settings.Servers = new[] { new MongoServerAddress("host_1"), new MongoServerAddress("host_2"), new MongoServerAddress("host_3") };
settings.ConnectionMode = ConnectionMode.ReplicaSet;

var client = new MongoClient(settings);
var db = client.GetServer().GetDatabase(database);

常量字符串连接字符串的可能重复项=”mongodb://someUserName(行政):somePassword@localhost:27020";