2015-10-29 18 views
0

我即将推出一个网站,我正在使用MySQL数据库来存储数据。我想确保我不会忘记保存任何稍后可能有用的内容。我目前有两个表,userseventsusers只是该网站的注册用户,而events是用户可以按计划创建的事件。这是我存储每个表:我应该在我的数据库中为我的网站保存哪些数据?

usersid(INT(11)),email(VARCHAR(75)),password(VARCHAR(10000)),first(VARCHAR(35)),last(VARCHAR( 35)),reg_date(时间戳),(一些其他的东西)

eventsid(INT(11)),description(文本),day(INT(11)),month(INT(11)) (int(11)),hour(int(11)),minute(int(11)),creator(int(11))

你们认为我应该加什么东西吗?对我的表格有什么建议?我对MySQL很新。

编辑:我还将一个created行添加到我的events表中并创建表的日期。我也可能会添加一个edited行,如果用户编辑事件(尽管不确定),我会放置旧的描述。

+2

我们不管理你的数据库,你存储你想要的。您随时可以更改表格以便稍后添加列。 –

+0

@ cricket_007我知道,但是如果稍后添加它们,我将不会为已经创建了已注册/事件的用户存储该数据。 – busterroni

+0

然后添加where子句以在查询事件时过滤出空值。我只是说你的问题非常广泛。不过,我的2美分会为您的活动使用时间戳,例如用户注册。 –

回答

1

您已经涵盖了所有基本知识,其他通常包含在用户表中的内容;

  • 用户名,或首选的显示名称
  • 性别,这也可以从标题(先生,太太,小姐等)
  • 地址推断,人们往往过分复杂化这一点,除非你真的需要知道街道名称,邮政编码等明确只保存整个事情到一个文本/ BLOB字段可以用于邮件出局,等
  • 联系电话/手机

重要的安全领域,

  • 荫不知道为什么你需要1000名字符的密码,我怀疑你可能不被散列,这是不好的,请哈希!
  • 考虑增加一个额外的“盐”一栏中,使用独特的盐显著提高密码的安全性
  • 跟踪自上次成功登录

信息,你可以自动收集,这可能与市场营销

帮助失败的登录尝试
  • 上次登录IP - 可以用来确定用户的地理位置
  • 登录数量,活跃程度这种使用[R
  • 上次登录日期,对于安全非常有用和识别陈旧的帐户,也可以很容易地看到你有多少登录过去一天了,周等
+1

我同意这个地址。将其存储为单个文本字段并解析它(有几个API和库来解析地址),或者如果它是您应用程序的重要组成部分,请将每个地址放在自己的表中。全部或没有。 – Schwern

+0

@harvey我不想限制用户密码的长度(最大值实际上是10,000个字符),是的,它们被SHA256散列(然后用bcrypt加密)。我也认为我会追踪失败的登录尝试,IP,登录次数和上次登录的日期,就像您所建议的那样 - 感谢您的想法! – busterroni

+0

@Schwern我不需要这个网站的用户地址,所以我宁可不问他们/如果我不需要它的话。 – busterroni

0

让我们这个出路现在,不要存储密码!这是密码被盗的方式。只存储密码的正确腌制散列。使用内置的SHA2或更好的是bcrypt

Read all about how to do it right here


关于类型的一些说明。

  • 不要使用TIMESTAMP,请使用DATETIME。 TIMESTAMP古怪,1970年至2038年的范围有限。
  • 将日期作为单个DATETIME列存储在事件表中。这将占用较少的空间,您可以使用MySQL's (weird and quirky but better than nothing) date functions
  • 考虑对所有ID使用UNSIGNED BIGINT,尤其是事件。 20亿看起来很多,但当你用完时它很糟糕。我曾经发生过。
  • 不要打扰有限长度的VARCHAR,只需使用TEXT。这一切都占用大约相同数量的磁盘空间。您的数据架构不应执行业务规则。
+0

我使用SHA256对其进行哈希处理,然后使用15轮bcrypt对其进行加密,然后将其存储。你觉得这足够安全吗? 我也将切换到DATETIME,谢谢你的提升。如果我需要,我能不能随后将INT转换为UNSIGNED BIGINT?根据您的建议,我也会切换到TEXT。 – busterroni

+0

@busterroni没有必要做多轮bcrypt或者使用两个哈希算法,bcrypt有一个“成本”,它会进行“成本”迭代。只要您愿意让用户等待登录,请设置成本,建议至少100毫秒。确保你使用了一个好的盐,'/ dev/random'很好。我不知道你在用什么语言,但是[PHP的password_hash](http://php.net/manual/en/function.password-hash.php)可以为你做这一切。我建议你将你的代码发布为另一个问题。 – Schwern

+0

@busterroni对于稍后切换ID,您可以,但是您必须获取每个ID和*每个使用该ID的表,然后在所有这些表上使用ALTER TABLE,并希望它不会花太长时间,希望其他人将ID存储为32位整数。或者您现在可以每行花费4个字节并完成它。这是其中一个“只会在几年内成为问题,如果我们取得成功”的权衡。 – Schwern

相关问题