2012-04-17 48 views
1

我想爲新創建的數據庫添加一個新用戶,如果該用戶存在,那麼我將連接到該數據庫。 我的代碼是:在mongodb中爲數據庫添加一個新用戶

公共CreateDatabaseOperationResult的CreateDatabase(字符串的databaseName,用戶名字符串,字符串密碼,MongoServer服務器) {

 CreateDatabaseOperationResult createDatabaseOpResult = new CreateDatabaseOperationResult(); 
     string message = null; 
     MongoCredentials credentials = new MongoCredentials(username, password); 
     MongoUser user = new MongoUser(credentials, false); 
     try 
     { 
      if (IsDatabaseNameValid(databaseName, out message)) 
      { 
       if (server.DatabaseExists(databaseName, admincredentials) == true) 
       { 
        createDatabaseOpResult.Database = server.GetDatabase(databaseName, credentials); 
        MongoUser tempuser = createDatabaseOpResult.Database.FindUser(username); 
        if (tempuser.Equals(user)) 
        { 

         //createDatabaseOpResult.DatabaseExists = true; 
         createDatabaseOpResult.IsOperationSuccessfull = false; 
         throw new ArgumentException("Database Already exist with different set of credentials "); 
        } 
       } 
       else 
       { 
        createDatabaseOpResult.Database = server.GetDatabase(databaseName, credentials); 
        createDatabaseOpResult.Database.AddUser(user); 
        //createDatabaseOpResult.DatabaseExists = false; 

       } 

       createDatabaseOpResult.IsOperationSuccessfull = true; 
      } 
     } 
     catch (MongoQueryException ex) 
     { 
      createDatabaseOpResult.Error = ex; 
     } 
     //catch (MongoAuthenticationException ex) 
     //{ 
     // createDatabaseOpResult.Error = ex; 
     //} 
     catch (MongoException ex) 
     { 
      createDatabaseOpResult.Error = ex; 
     } 
     catch (ArgumentException ex) 
     { 
      createDatabaseOpResult.Error = ex; 
     } 


     return createDatabaseOpResult; 

    } 

當我使用它連接到數據庫,但現有的數據庫,當我嘗試添加新的使用Database.AddUser給出錯誤'該數據庫的憑據無效' 請參閱錯誤並回復

回答

1

大多數人使用mongo shell來添加和刪除用戶,但是如果您真的想在C#中這樣做是使用r憑證取決於你想要做什麼。假設你有以下兩種憑據集,一個用於管理數據庫,一個用於常規數據庫:

var adminCredentials = new MongoCredentials("myadminusername", "myadminpassword", true); 
var userCredentials = new MongoCredentials("myusername", "myuserpassword"); 

注意,創建adminCredentials你必須通真到管理參數時。

測試如果數據庫存在需要管理員憑據:

if (server.DatabaseExists("mydatabase", adminCredentials)) 
{ 
    // database exists 
} 

要添加用戶需要管理員憑據:

var myDatabaseWithAdminCredentials = server.GetDatabase("mydatabase", adminCredentials); 
if (myDatabaseWithAdminCredentials.FindUser("myusername") == null) 
{ 
    myDatabaseWithAdminCredentials.AddUser(userCredentials); 
} 

通常情況下你可以使用一般的用戶憑據與數據庫的工作:

var myDatabaseWithUserCredentials = server.GetDatabase("mydatabase", userCredentials); 
var count = myDatabaseWithUserCredentials.GetCollection("mycollection").Count(); 

另外,請記住,每個數據庫可以有任意數量的用戶,因此您不需要真的需要檢查數據庫是否已經存在一組不同的憑證。

相關問題