1

新しく作成したデータベースに新しいユーザーを追加したいのですが、このユーザーが存在する場合は、そのデータベースに接続します。私のコードは次のとおりです。

public CreateDatabaseOperationResult CreateDatabase(文字列データベース名、文字列ユーザー名、文字列パスワード、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 で「このデータベースの資格情報が無効です」というエラーが表示されますエラーを確認して返信してください

4

1 に答える 1

2

ほとんどの人は mongo シェルを使用してユーザーを追加および削除しますが、本当に C# で実行したい場合は、目的に応じて適切な資格情報を使用するのがコツです。次の 2 つの資格情報セットがあるとします。1 つは管理データベース用で、もう 1 つは通常のデータベース用です。

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

adminCredentials を作成するときは、admin パラメータに true を渡す必要があることに注意してください。

データベースが存在するかどうかをテストするには、管理者の資格情報が必要です。

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

また、各データベースには任意の数のユーザーを含めることができるため、データベースが別の資格情報セットで既に存在するかどうかを実際に確認する必要はないことに注意してください。

于 2012-04-17T14:16:55.380 に答える