使用mongo c#driver将用户添加到数据库

时间:2012-04-17 09:56:35

标签: mongodb

我想将用户添加到mongodb中新创建的数据库中。我正在使用db.addUser(用户名,密码)。 但它提供了mongoAuthentication异常。请告诉我原因。我想添加一个用户,以便下次当我使用相同的数据库时,我可以使用与我传递给创建用户时相同的一组信用

4 个答案:

答案 0 :(得分:2)

  1. 使用mongod.exe参数启动--auth。这将启用启用了身份验证模式的MongoDB。
  2. 由于第一次启动MongoDB时没有用户,因此将被视为" localhost exception" (您应该看到一条消息说"在admin.system.users中没有配置用户,允许在控制台中访问localhost")。这意味着,它允许您在管理员数据库(管理员用户)中创建第一个用户,然后他将有权创建其他常规用户。
  3. 要创建管理员用户启动mongo.exe并输入以下命令:

    > use admin
    > var user = {
        "user" : "adminUser",
        "pwd" : "adminPass",
        "roles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            }
        ]
    }
    
    > db.createUser(user);
    

    您也可以使用C#代码完成此操作,如下所示:

    private static bool fnCreateAdminUser()
    {
        try
        {
            var user = new BsonDocument { { "createUser", "adminUser" }, { "pwd", "adminPass" }, { "roles", new BsonArray { new BsonDocument { { "role", "userAdminAnyDatabase" }, { "db", "admin" } } } } };
            new MongoClient().GetDatabase("admin").RunCommand<BsonDocument>(user);
            return true;
        }
        catch (MongoCommandException) { return true; }
        catch { return false; }
    }
    
  4. 现在您的管理员用户已创建,您可以使用此管理员用户为您的数据库创建其他常规用户。您可以使用C#代码或命令行等,具体取决于您的实现。以下是为指定数据库创建用户的示例C#方法:

    private static bool CreateUser(string strDBName)
    {
        try
        {
            if (!string.IsNullOrEmpty(strDBName))
            {
                // prepare admin credentials
                MongoCredential cred = MongoCredential.CreateCredential("admin", "adminUser", "adminPass");
                MongoClientSettings setting = new MongoClientSettings();
                setting.Credentials = new[] { cred };
    
                var user = new BsonDocument { { "createUser", "regularUser" }, { "pwd", "regularPass" }, { "roles", new BsonArray { new BsonDocument { { "role", "readWrite" }, { "db", strDBName } } } } };
                new MongoClient(setting).GetDatabase(strDBName).RunCommand<BsonDocument>(user);
                return true;
            }
            else
            {
                return false;
            }
        }
        catch (MongoCommandException) { return true; } // if user already exists
        catch { return false; }
    }
    
  5. 您还可以参考this博文,了解更多详情。它还解释了其他一些事情,比如添加/更改用户角色等。

答案 1 :(得分:0)

如果您已在admin数据库中创建了一个带有用户的数据库,那么您需要先连接这些凭据,然后才能创建新用户。

答案 2 :(得分:0)

答案 3 :(得分:0)

您可以使用以下代码添加用户。

db.addUser(
    {
      user: "user",
      pwd: "pass",
      roles: [ "root" ]
    }
)