2012-04-17 9 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シェルを使用してユーザーを追加したり削除したりしますが、本当にC# rを使うことですあなたがしようとしていることに応じて信用証明書を要求します。管理パラメータにあなたが必見パス真adminCredentialsを作成するときにすることを

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

注:資格情報、管理データベース用と通常のデータベースのための1次の2セットを持っていると仮定します。データベースが存在するかどうかをテストするために

は、管理者の資格情報を必要とします。

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(); 

また、各データベースには任意の数のユーザーが含まれることがあるので、データベースがすでに異なる資格情報セットで存在するかどうかを確認する必要があります。

関連する問題