数据库中的登录名和密码存储
Login & Password storage in databases
我正在创建一个简单的聊天,我想添加用户登录功能。
我有一个问题:我应该将登录名和密码 (hash+salt) 存储在与消息和其他聊天内容相同的数据库中,但在不同的数据库中 table 还是有更好的方法来创建另一个数据库为了它?
请告诉我如何以及为什么。非常感谢
对我来说,salt 更像是一个赋予散列函数的环境变量。但是你为什么要储存盐?
我是否应该将登录名和密码(哈希+盐)存储在与消息和其他聊天内容相同的数据库中,但在不同的数据库中 table?
是的,如果它们在同一数据库中,则它们必须在另一个 table 中,例如“用户”。例如,您将有一个 table 命名用户和一条命名消息。
密码必须像您拥有的任何其他敏感数据一样加密。
例如:消息是私人的吗?可能。所以他们最好加密。您不希望具有数据库访问权限的人阅读所有聊天内容。
或者有更好的方法为它创建另一个数据库吗?
如果您的系统架构是微服务,那么您的 login/user 数据很有可能应该在另一个数据库中。这将意味着数据重复,但更易于维护。但是,这实际上取决于您的系统设计。对于非常小的应用程序,我不会使用微服务,除非您希望该应用程序在某个时候增长、新功能等。
通常,用户 table 与您存储的其他信息属于同一个数据库。重要的是,它应该只包含密码的加盐哈希,这与加密密码不同。盐也必须存储,因此您可以在用户想要登录时重现相同的哈希值。
密码哈希函数将生成一个包含密码哈希和随机盐的字符串(每个密码应该不同)。该字符串可以存储在数据库中。合适的密码哈希函数是 Argon2、BCrypt、SCrypt 和 PBKDF2,不应使用其他哈希函数,如 MD5、SHA*,因为它们太快了。
如果您正在寻找更多信息,请查看我关于 safely storing passwords 的教程。
我正在创建一个简单的聊天,我想添加用户登录功能。
我有一个问题:我应该将登录名和密码 (hash+salt) 存储在与消息和其他聊天内容相同的数据库中,但在不同的数据库中 table 还是有更好的方法来创建另一个数据库为了它?
请告诉我如何以及为什么。非常感谢
对我来说,salt 更像是一个赋予散列函数的环境变量。但是你为什么要储存盐?
我是否应该将登录名和密码(哈希+盐)存储在与消息和其他聊天内容相同的数据库中,但在不同的数据库中 table?
是的,如果它们在同一数据库中,则它们必须在另一个 table 中,例如“用户”。例如,您将有一个 table 命名用户和一条命名消息。 密码必须像您拥有的任何其他敏感数据一样加密。 例如:消息是私人的吗?可能。所以他们最好加密。您不希望具有数据库访问权限的人阅读所有聊天内容。
或者有更好的方法为它创建另一个数据库吗?
如果您的系统架构是微服务,那么您的 login/user 数据很有可能应该在另一个数据库中。这将意味着数据重复,但更易于维护。但是,这实际上取决于您的系统设计。对于非常小的应用程序,我不会使用微服务,除非您希望该应用程序在某个时候增长、新功能等。
通常,用户 table 与您存储的其他信息属于同一个数据库。重要的是,它应该只包含密码的加盐哈希,这与加密密码不同。盐也必须存储,因此您可以在用户想要登录时重现相同的哈希值。
密码哈希函数将生成一个包含密码哈希和随机盐的字符串(每个密码应该不同)。该字符串可以存储在数据库中。合适的密码哈希函数是 Argon2、BCrypt、SCrypt 和 PBKDF2,不应使用其他哈希函数,如 MD5、SHA*,因为它们太快了。
如果您正在寻找更多信息,请查看我关于 safely storing passwords 的教程。