2011-11-27 107 views
1

我在我的项目中使用Cassandra,并且需要存储有关用户(电子邮件,用户名,密码,名字和其他信息)的信息。这些数据也用于授权目的。Cassandra中的用户信息存储

我是设计Cassandra数据模型数据库的新手。所以,我需要你的帮助来了解我是否正确地做到了这一点。

我有名为“users”的密钥空间。在这个密钥空间中,我使用用户的电子邮件作为主键。我有以下专栏系列:名字,姓氏,用户名,密码。

主要问题如下:使用电子邮件作为这个关键是个好主意吗?

对于密码 - 存储它的MD5哈希值是否好,还是有更好的做法呢?

UPD 我上面有误印。我的意思是 - 一个密钥空间作为数据库“测试”,一个列家族“用户” - 用户信息的收集和每个用户财产的许多单独的列。

回答

3

使用电子邮件作为关键是很好,如果这是你如何查找你的用户和电子邮件是唯一的。如果您通过用户名和用户名查找您的用户是唯一的,那么请使用用户名作为密钥。如果您需要通过用户名和电子邮件进行查找,那么您需要第二个列族来映射用户名 - >电子邮件。

不要存储明文密码。即使存储密码和盐的md5也是不够的。请参阅this post

+0

您发布的链接看起来不再有效。在网站上搜索引用的帖子,网址如下:https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2007/july/enough-with-the-rainbow-你需要知道的关于安全密码方案/ –

+0

此外,似乎还有一篇新的博客文章 - 比参考文章(2015年3月和2007年7月)的当前更多:http ://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2015/march/enough-with-the-salts-updates-on-secure-password-schemes/ –

3

对于用户的每个属性,您不需要单独的列族。你可以把他们都在一个单一的列族,多列,例如:

key -> firstname lastname username password 
     John   Smith  jsmith  1AB3C4GA16GH134G 

的设计取决于你想做的事情查找。如果您只需要通过电子邮件地址查找用户,那么您提出的建议就很好。但是,当用户更改其电子邮件地址时会发生什么?如果用户名是固定的,那么键入用户名可能会更简单...

[更新]如果您总是一次检索所有用户数据,并且您只通过键检索数据,那么您当然可以存储所有信息嵌入到单个列中,如JSON或类似内容。但是,您因此失去了通过名称,用户名等查找用户的能力。

+0

你是对的!关于很多专栏 - 这是错误打印。我的意思是 - 一个密钥空间测试(db),一个列族“用户”以及每个人物业的许多独立列。 – dizpers