mongodb:使用c#创建安全密码

时间:2014-07-07 19:07:12

标签: mongodb mongodb-.net-driver

对不起,如果这是一个微不足道的问题,但我不知道怎么做真的很好:D

我正在使用官方c#-mongodb-driver。

  • 1问题

Mongodb以明文形式存储用户密码吗?所以我必须注意安全密码?用c#做最好的方法是什么?

这是否正常(在驱动程序源中过时的addUser-Method中发现类似内容)?

        var securePassword = new PasswordEvidence(password).SecurePassword;

        var userCommand = new CommandDocument
        {
            { "createUser", username },
            { "pwd", securePassword.ToString() },
            { "digestPassword", false },
            { "customData", new BsonDocument()},
            { "roles", new BsonArray()}
        };

        var result = Database.RunCommand(userCommand);
  • 2问题

c#-driver正在使用密钥" digestPassword"但我找不到任何相关的文件。任何想法是什么意思以及没有正确记录的原因?

  • 3问题

如何在不访问admin-database(无法访问db.system.users.find())的情况下检查输入的用户/密码组合是否正确?有没有帮助方法?我找不到一个......

托拜厄斯

1 个答案:

答案 0 :(得分:0)

  

Mongodb以明文形式存储用户密码吗?所以我必须注意安全密码?

对于MongoDB中的默认身份验证(aka MONGODB-CR或“challenge-response auth”),密码在内部存储为MD5( <username> + ":mongo:" + <password_text> )的十六进制编码。它们由司机通过电汇以摘要形式发送(请参阅下面的问题的答案,而不是明文)。

您应该始终关心选择安全密码并正确锁定MongoDB部署。 MongoDB文档有一个相当全面的section on Security,包括风险管理策略和访问控制教程。

  

c#-driver正在使用密钥“digestPassword”,但我找不到任何相关文档。任何想法这意味着什么以及为什么没有正确记录?

digestPassword被记录为Implement Authentication in a Driver的一部分,除非您正在实施驱动程序,否则不是您通常需要关注的细节。

驱动程序使用两步过程进行身份验证:

1)请求在后续身份验证请求中使用十六进制nonce

2)使用组合现时和密码摘要的消息摘要进行身份验证

  

这是否正常(在驱动程序源中过时的addUser-Method中发现类似内容)?

不推荐使用addUser方法,而是使用createUser命令,这是一个以角色为特色的较新实现。

我强烈建议使用documented C# driver API,而不是尝试重新实现较低级别的驱动程序命令。

  

如何在不访问admin-database(无法访问db.system.users.find())的情况下检查输入的用户/密码组合是否正确?有没有帮助方法?我找不到一个......

您可以尝试使用它进行身份验证来检查用户/密码组合。您还必须考虑用户的角色是否授予运行请求命令的适当权限(如果不是,您的应用程序将必须处理auth异常)。

如果要查看或管理身份验证详细信息(并假设您具有相应的权限),mongo shell中有一整套User and Role Management帮助程序。