使用Python将信息存储在MySQL数据库中

0 投票
2 回答
963 浏览
提问于 2025-04-16 02:06

我正在做一个很大的项目,已经忙了一段时间了。最近我决定提高软件处理数据的安全性。我已经知道怎么用DES加密来加密和解密数据字符串,但我不太确定该把加密后的数据放在哪里。我想把所有东西存储在MySQL数据库里,但还没搞清楚怎么使用这个数据库。我在网上查了一些资料,但没找到合适的解决办法。

我需要为每个账户存储以下信息:

用户名
密码
安全问题
安全答案
邮箱
关键词列表
网址列表

我觉得存储这些信息就像是在数据库里创建表格,但我不太确定。也许可以为用户创建一个表,然后在这个用户表里再创建其他表?我对如何从Python操作MySQL数据库还不太了解,所以任何帮助都会非常感激。

抱歉我晚了点修改内容,我刚意识到需要稍微整理一下。

2 个回答

0

你基本上有两个选择:

你知道怎么创建一个表吗,一般来说?

对于 MySQL,你需要先登录,创建一个数据库,选择(使用)那个数据库,然后

create table account(
   username varchar(32),
   password varchar(128),
   sec_question varchar(512),
   sec_answer varchar(128),
   email_address varchar(128)
   );

把网址和关键词分开做成不同的表会更好,不过具体怎么做超出了这个回答的范围!

注意,这并不是创建表的全面或最佳方法,也不是你用 ORM 创建表的方式,只是一个例子。

要建立一个安全可靠的密码系统,你需要做很多研究。我相信这里的人会很乐意帮助你理解哈希等相关知识。

这里有一个很好的文章链接,讲的是如何使用 MySQLdb 模块。

2

下面是一个可能的数据库结构示例:

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。

撰写回答