用户管理
视情况而定,三张表或四张表:
- users 用户基本信息表,用于存放用户id,姓名、性别、头像等常用信息
- accounts 用户账号表,users:accounts 1:n,用于存储用户账号、登录时间、登录ip等信息(多类型账号支持)
- passwords 账号对应的密码 accounts:passwords n:1,多个账号都可以登录使用同一个密码。
- profiles 用户其他信息,users:profiles 1:1,用于存放一些不常用的信息,比如邮箱,工作,职位等等。
为什么1:1的两个表,不直接合并成一个表?常用信息使用一个表,不常用信息使用一个表,可以提高查询速度,信息如果区分的好,单表的查询要远远多于两个表的关联查询,比如users表和profiles表,“用户名”这样的信息会频繁用到,而“单位”,则不是很常用。需要同时显示的时候,做一下关联查询即可。
用户敏感信息处理:
- 密码加密:用户密码进行加密处理
- 密码添加salt(一个随机字符串,每个用户有个唯一的salt),确保即使密码明文相同,加密过后的密码也不相同
- user_id,通过一个序列算法生成(详见《使用序列生成id》),防止分表分库user_id出现重复,防止恶意爬虫,获取有规律的user_id
一个python中的加密算法:1
2
3
4
5
6
7
8def _encrypted_password(password, salt):
"""
* 密码加密
* @param string password 密码
* @param string salt 混淆码
* @return string 加密后的密码
"""
return hashlib.md5(hashlib.md5(password).hexdigest() + salt).hexdigest()
users、accounts、passwords表创建语句:
1 | CREATE TABLE `users` ( |