0

Mongo 的文档指出,启用身份验证后,对于添加到 admin 数据库的用户,这些用户应该能够访问 Mongo 中的其他数据库,并在 admin 数据库级别授予权限。

“admin 数据库是唯一的。对 admin 数据库具有正常访问权限的用户对所有数据库具有读写访问权限。对 admin 数据库具有只读访问权限的用户对所有数据库具有只读访问权限。” http://docs.mongodb.org/manual/administration/security/

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

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

server.GetDatabase(...
new MongoClient(a connectionString ...

有谁知道这是否是预期的行为?或者可以提出解决方案。

4

3 回答 3

0

这不是 mongodb 问题。我相信您可以像这样从 mongodb shell 进行身份验证:

use admin
db.auth(user, pass)

这是一个 mongodb c# 驱动程序技巧。很久以前,为了理解这一点,我花了一些时间阅读 c# 驱动程序代码。

所以连接字符串应该是这样的:

mongodb://admin(admin):1@localhost:27020/myDb

(admin)为了告诉驱动程序您将通过管理员用户进行身份验证的技巧。

于 2013-01-31T20:24:16.423 回答
0

还有另一种方法可以连接针对 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);

http://docs.mongodb.org/ecosystem/tutorial/authenticate-with-csharp-driver/

于 2015-03-16T21:51:58.160 回答
0

答案已经在stackoverflow上发布了:)

Mongodb C# 驱动程序 - 无法使用管理员身份验证访问其他数据库

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

于 2013-01-31T20:22:58.157 回答