我正在开发一个MySQL项目网站,其目标是可以在几家本地公司实施,以便跟踪一些信息(注意这是一个大学课程的项目)。我的问题是关于使用类似结构的最佳方式,可以使每个公司的信息与其他公司保密。
假设我有3个不同的公司,每个公司都需要一个数据库来存储员工,项目和消息,或者每个公司需要3个DB。
我目前的计划是创建10个总数据库:3个所需数据库中的3个,总共9个。这些数据库的名称前缀可以区分它们(例如CompanyA_employees
,CompanyB_employees
,CompanyC_employees
等)然后我会使用第10个数据库来存储公司名称及其各自的前缀。这是一个很好的方法吗,还是有更好的方法?
另外,我也在考虑给每个数据库自己的用户(再次,它将是前缀)与自己的唯一密码。这将是PHP脚本中用于访问数据库和SELECT
,INSERT
等的用户名和密码。我希望这会让某人破解超过1个DB的困难一次,或公司能够访问彼此的敏感信息。此外,这些用户只能获得数据库的最低权限,以进一步防范fubar'd。
我会在第10个数据库中存储数据库用户的密码(当然是SHA256
或SHA512
哈希值)。如果这是一个好的设计,那么每次我需要访问其他DB时,是否有更好(但仍然安全)的方法来获取这些密码而不是查询第10个DB?我假设将它们存储在cookie中是一个安全方面的坏主意。
任何建议都值得赞赏,因为我对保护MySQL数据库相对较新。
答案 0 :(得分:0)
首先,您要定义数据库将要服务的更多角色。
如果每个公司或一个主数据库应该有一个数据库,这实际上取决于预期持有的信息量。
请注意,除非您运行自己的专用数据库服务器,否则大多数Web主机都不允许您托管1000多个数据库。成本肯定会成为那里的一个因素。
对于员工,项目和消息,一个数据库就足够了。
使用Web界面,您只需要网站本身的单个数据库用户即可连接到数据库。这取决于您的网站如何处理网站用户登录以及每个用户有权访问的数据。
因此,您需要在数据库中创建一个website-user-table,用于处理用户登录信息,超时,入侵者检测以及用户有权访问的数据库中的哪些信息。
例如,对于每个信息表,您可以拥有一个具有唯一公司ID的列。然后,您的网站允许属于该公司的用户查看该公司的信息,而不是其他人。
所以你的数据库表可能是:
---------
Web_Users
公司
员工
项目
消息
---------
使用外键将Web_users,Employees,Projects和Messages表链接到Company表。
此设置可确保您的数据库安全,因为只有您的网站才能访问它,只有那些可以登录您网站的人才能访问信息 - 只有属于该用户所属公司的信息。
这会给您编写网站界面的程度带来大部分安全负担。
希望这有帮助!