我正在使用最新版本的驱动程序和MongoDB数据库2.6,我曾使用以下代码创建用户:
MongoUser _user1 = new MongoUser("username", "password", false);
MongoDatabase.AddUser(_user1);
现在通过显示以下信息表示MongoDatabase.AddUser()
已被弃用:
...已过时:使用新的用户管理命令'createUser'或 'UpdateUser两个'。“
这个新的用户管理命令在哪里?如何使用新的MongoDB C#驱动程序创建用户?
答案 0 :(得分:4)
对于那些有兴趣使用C#v2.0.1驱动程序和MongoDB v3.0.6创建用户的人,请使用以下命令:
var client = new MongoClient(connectionString);
var database = client.GetDatabase("database_to_create_user_in");
var user = new BsonDocument { { "createUser", "fred" }, { "pwd", "some_secure_password" }, { "roles", new BsonArray { new BsonDocument { { "role", "read" }, { "db", "database_to_create_user_in" } } } } };
await database.RunCommandAsync<BsonDocument>(user);
答案 1 :(得分:3)
我使用的是MongoDB 2.6.2和最新的C#驱动程序1.9.2。 这是您使用&#39; createUser&#39;:
添加新用户的方法public static void AddUser(string user, string password, string[] roles)
{
var database = GetDatabase();
var command = new CommandDocument { { "createUser", user}, { "pwd", password }, { "roles", new BsonArray(roles) } };
var result = database.RunCommand(command);
}
答案 2 :(得分:0)
我在GitHub存储库的最新代码中搜索了'createUser': https://github.com/mongodb/mongo-csharp-driver/search?q=createUser&ref=cmdform
在撰写本文时,仅提及'createUser'is here
该方法已标记为已过时in this commit
然而;仔细检查代码,我see this:
if (_server.RequestConnection.ServerInstance.Supports(FeatureId.UserManagementCommands))
{
AddUserWithUserManagementCommands(user);
}
else
{
AddUserWithInsert(user);
}
因此,它正在引导所需的方法
答案 3 :(得分:0)
对我来说,我很难胜任这些角色。我想向mongodb添加一个管理员(初始用户)。我的工作解决方案就是这样。
private static bool CreateAdminUser(string databaseUser, string databasePassword)
{
try
{
var databaseName = "admin";
var user = new CommandDocument
{
{ "createUser", databaseUser },
{ "pwd", databasePassword },
{
"roles", new BsonArray
{
new BsonDocument { { "role", "readWriteAnyDatabase" }, { "db", databaseName } },
new BsonDocument { { "role", "userAdminAnyDatabase" }, { "db", databaseName } },
new BsonDocument { { "role", "dbAdminAnyDatabase" }, { "db", databaseName } }
}
}
};
new MongoClient().GetServer().GetDatabase(databaseName).RunCommand(user);
return true;
}
catch
{
return false;
}
}