【问题标题】:MySQL multiple databases and usersMySQL多数据库和用户
【发布时间】:2015-08-29 02:15:27
【问题描述】:

我正在开发一个 MySQL 项目网站,目标是可以在几家本地公司中实施,以跟踪一些信息(请注意,这是一个大学课程项目)。我的问题是关于使用类似结构的最佳方式,该结构可以使每家公司的信息对其他公司保密。

假设我有 3 家不同的公司,每家都需要一个数据库来存储员工、项目和消息,或者每个公司需要 3 个数据库。

我目前的计划是创建 10 个数据库:3 个所需数据库中的 3 个,总共 9 个。这些数据库的名称将带有前缀以区分它们(例如 CompanyA_employeesCompanyB_employeesCompanyC_employees等)然后我将使用第 10 个数据库来存储公司名称及其各自的前缀。这是执行此操作的好方法,还是有更好的方法?

另外,我还想为每个数据库提供自己的用户(同样,它会加上前缀)和自己的唯一密码。这将是 PHP 脚本中用于访问 DB 和 SELECTINSERT 等的用户名和密码。我希望这将使某人难以一次破坏超过 1 个 DB,或让公司能够访问彼此的敏感信息。此外,这些用户只会被授予对数据库的最低权限,以进一步防止事情变得更加糟糕。

我会将 DB 用户的密码(当然,SHA256SHA512 用盐散列)存储在第 10 个 DB 中。如果这是一个好的设计,是否有比每次需要访问其他数据库时查询第 10 个数据库更好(但仍然安全)的方法来获取这些密码?我假设将它们存储在 cookie 中在安全方面是个坏主意。

感谢任何建议,因为我对保护 MySQL 数据库比较陌生。

【问题讨论】:

  • 我理解为不同的公司使用不同的数据库,但为什么为单个公司使用 3 个数据库?只需做一个 masterDB,然后每个公司一个 DB。
  • 这真的取决于...您也可以将数据库与公司隔离开来,只允许访问 API。您将更详细地了解谁可以访问什么以及访问多少次。
  • 我可能可以将所有内容放入每个公司@RobbyCornelissen 的单个数据库中。我将它们分开的主要目标是允许 3 个用户拥有唯一的密码,从而使某人更难破解和窃取所有公司信息。我将不得不看看每个公司是否可以使用一个数据库,因为数据库可能存在大小限制,而且我们的设计必须扩展到 1000 多家公司。不过谢谢你的建议!

标签: mysql database


【解决方案1】:

首先,您想定义更多数据库将要服务的角色。

如果您应该每家公司拥有一个数据库或一个主数据库,这实际上取决于预期保存的信息量。

请注意,除非您运行自己的专用数据库服务器,否则大多数 Web 主机不允许您托管 1000 多个数据库。成本肯定会成为其中的一个因素。

对于员工、项目和消息,一个数据库就足够了。

使用 Web 界面,您只需要网站本身的单个数据库用户即可连接到数据库。然后取决于您的网站如何处理网站用户登录以及每个用户可以访问哪些数据。

因此,为此您需要在数据库中创建一个网站用户表,用于处理用户登录信息、超时、入侵者检测以及用户可以访问数据库中的哪些信息。

例如,对于每个信息表,您可以有一个具有唯一公司 ID 的列。然后,您的网站允许属于该公司的用户查看该公司的信息,而不能查看其他公司的信息。

所以你的数据库表可能是:

---------
Web_Users
公司
员工
项目
留言
---------

Web_users、Employees、Projects 和 Messages 表使用外键链接到 Company 表。

此设置可确保您的数据库安全,因为只有您的网站可以访问它,并且只有可以登录您网站的人才能访问信息——只有属于用户所属公司的信息。

这将大部分安全负担置于您编写网站界面的程度。

希望这会有所帮助!

【讨论】:

  • 哇,非常彻底,非常有帮助!非常感谢!
  • 事实证明,我需要为每家公司建立一个单独的数据库。您会建议为每个数据库设置一个数据库用户,还是只让我的网站用来访问所有数据库的一个整体数据库用户?
  • 每家公司是否有任何理由必须直接查询其数据库?或者您的网站会是连接到数据库的唯一接口吗?如果你把网站本身看成一个用户,所有公司都在通过网站,那么你只需要网站的数据库用户
  • 一切都将通过我的网站,所以我只有一个用户。非常感谢大家的帮助!
猜你喜欢
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多