使用Python将信息存储在MySQL数据库中
我正在做一个很大的项目,已经忙了一段时间了。最近我决定提高软件处理数据的安全性。我已经知道怎么用DES加密来加密和解密数据字符串,但我不太确定该把加密后的数据放在哪里。我想把所有东西存储在MySQL数据库里,但还没搞清楚怎么使用这个数据库。我在网上查了一些资料,但没找到合适的解决办法。
我需要为每个账户存储以下信息:
用户名
密码
安全问题
安全答案
邮箱
关键词列表
网址列表
我觉得存储这些信息就像是在数据库里创建表格,但我不太确定。也许可以为用户创建一个表,然后在这个用户表里再创建其他表?我对如何从Python操作MySQL数据库还不太了解,所以任何帮助都会非常感激。
抱歉我晚了点修改内容,我刚意识到需要稍微整理一下。
2 个回答
你基本上有两个选择:
- 使用 mysqldb 模块
- 使用像 SQLAlchemy 这样的对象关系管理器(ORM)
你知道怎么创建一个表吗,一般来说?
对于 MySQL,你需要先登录,创建一个数据库,选择(使用)那个数据库,然后
create table account(
username varchar(32),
password varchar(128),
sec_question varchar(512),
sec_answer varchar(128),
email_address varchar(128)
);
把网址和关键词分开做成不同的表会更好,不过具体怎么做超出了这个回答的范围!
注意,这并不是创建表的全面或最佳方法,也不是你用 ORM 创建表的方式,只是一个例子。
要建立一个安全可靠的密码系统,你需要做很多研究。我相信这里的人会很乐意帮助你理解哈希等相关知识。
这里有一个很好的文章链接,讲的是如何使用 MySQLdb 模块。
下面是一个可能的数据库结构示例:
user
user_id (PK)
username (char)
password (char)
security_question_id (FK)
security_answer (char)
email_address (char)
security_question
security_question_id (PK)
question (char)
keyword
keyword_id (PK)
keyword (char)
user_keyword
user_keyword_id (PK)
user_id (FK)
keyword_id (FK)
url
url_id (PK)
user_id (FK)
url (char)
PK = Primary Key
FK = Foreign Key
char = varchar of some max length that you define
假设条件:
- 有一份标准的安全问题列表供用户选择。
- 很多用户可能会有相同的关键词,所以把它们放在自己的表里。
- 网址更独特,所以只需将网址和用户ID一起存储。如果需要的话,可以改成关键词使用的共享模式。
- 所有字段都是必填的,没有可以留空的。
正如我之前提到的,我建议对密码进行加密(加盐)。不需要能恢复密码,用户可以重置密码。我以前模仿过Django的密码风格:
sha1$8ac10f$a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
这个格式是:哈希方法、盐值和密码哈希,用$字符分隔。你可以生成一个随机字符串作为盐值。在加密密码之前,把盐值加到密码上。然后在密码字段中存储像上面那样的字符串。要验证密码是否正确,提取这三个字段,把盐值加到用户输入的密码上,进行哈希处理,然后和数据库中的哈希值(第三个字段)进行比较。如果匹配,说明密码是正确的。
我个人会使用SQLAlchemy。