2012-04-17 2 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

대부분의 사람들은 사용자 추가 및 삭제하기 위해 몽고 쉘을 사용하여 회신 해 주시기 바랍니다 '이 데이터베이스에 대한 잘못된 자격 증명'오류를 제공하지만, 당신이 정말로 원하는 경우 C#을 트릭에 그것을 할 r을 사용하는 것입니다. 당신이하려는 일에 따라 자격 증명이 필요합니다. 자격 증명의 다음 두 세트, 정기적으로 데이터베이스 관리자 데이터베이스에 대한 하나 하나가 가정

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

참고하는 관리자 매개 변수는 해야 패스는 true adminCredentials를 만들 때.

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

는 보통 데이터베이스 작업을 일반 사용자 자격 증명을 사용 :

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

사용자를 추가하려면이 관리자 자격 증명이 필요 : 데이터베이스가 존재하는 경우

테스트

은 관리자 자격 증명이 필요
var myDatabaseWithUserCredentials = server.GetDatabase("mydatabase", userCredentials); 
var count = myDatabaseWithUserCredentials.GetCollection("mycollection").Count(); 

또한 각 데이터베이스에는 원하는 수의 사용자가있을 수 있으므로 데이터베이스가 다른 자격 증명 세트로 이미 존재하는지 여부를 확인해야합니다.

관련 문제