2013-01-31 22 views
0

對於蒙戈的文檔指出,當啓用身份驗證,併爲用戶添加到管理數據庫,這些用戶應該能夠訪問其它數據庫中蒙戈,與在管理數據庫級授予的權利。蒙戈管理數據庫憑據沒有在其他數據庫上工作服務器

「管理數據庫是獨一無二的。正常訪問管理數據庫用戶具有讀取和寫入所有數據庫的訪問。與只讀到管理數據庫訪問權限的用戶已經閱讀所有數據庫的訪問。」 http://docs.mongodb.org/manual/administration/security/

但與C#庫版本1.7.0.4714測試,這種情況並非如此。 只有在特定數據庫中創建的帳戶纔有權訪問該數據庫。

我曾與在連接字符串 憑據,並通過在C#

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

數據庫級別明確設置憑據測試有誰知道這個預期的行爲?或者可以提出解決方案。

+0

[Mongodb C#驅動程序可能重複 - 無法使用管理員身份驗證訪問其他數據庫(http://stackoverflow.com/questions/6764078/mongodb-c-sharp-driver-cant-use-admin-authentication-to-access-other-database) –

回答

0

這不是一個mongodb問題。我相信你可以從這樣的mongodb shell進行身份驗證:

use admin 
db.auth(user, pass) 

這是一個mongodb c#驅動器技巧。很久以前,我花了一些時間閱讀C#驅動程序代碼,以瞭解這一點。

所以連接字符串應該是這樣的:

mongodb://admin(admin):[email protected]:27020/myDb 

爲了告訴你要通過管理員用戶進行身份驗證司機(admin)的伎倆。

0

還有另一種方式與對管理數據庫身份驗證連接。

的缺點是,你必須建立整個連接對象,而不是單純的包裝所有的信息在一個連接字符串。

而是一個連接字符串像

var connectionString = "mongodb://localhost"; 
var client = new MongoClient(connectionString); 

你可以創建一個MongoClientSettings對象實例化MongoClient的,設置憑據(以及任何其他連接設置一起)和實例的客戶端通過該對象

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/