3

抱歉,如果以前有人问过这个问题,但我做了一些搜索,但无法找到我的问题的答案。

我将我的网站内容存储在 MySQL 数据库中(我们称之为content),我需要为我的网站编写一个简单的登录系统。所以,我需要创建某种users包含用户名、密码、权限等的表,而我想知道我是否应该在我的content数据库中将它作为一个新表,或者它是否会更安全它存储在一个新的数据库中?将它放在第二个数据库中的缺点是我将不得不使用两个数据库连接而不是一个。

也许这是一个愚蠢的问题,但我感谢您的意见!

4

4 回答 4

2

您不需要使用不同的数据库。当您获得具有完全不同目的的数据时,这更加保留,例如,公司 A 有一个数据库,而公司 B 有一个数据库。

请注意,简单地拥有两个不同的数据库并不需要两个不同的数据库连接来访问。只要您登录数据库的用户 ID 具有适当的访问权限,您就可以执行以下操作:

SELECT onedatabase.table.field, someotherdatabase.table.field
...
于 2012-12-12T20:56:37.050 回答
0

将敏感信息移动到另一个数据库是一种很好的深度防御策略,因为它限制了 SQL 注入的影响。这不符合隔离和计划失败的原则。这是保护敏感医疗或财务信息的常见做法。通常这些独立的数据库会更进一步,将信息以加密状态存储。

MySQL 下的 SQL Injection 非常有限,您无法堆叠查询(例如:)'; drop table ...,并且没有 MySQL 的文件权限您无法获得 shell。剩下的唯一有用的是使用union select或子选择获取凭据以访问其他表或数据库。只要您拥有单独的用户帐户和单独的权限,攻击者就必须在访问敏感数据库的查询中找到 SQL 注入,从而减少您的攻击面。无法通过 SQL 注入访问敏感信息使得这种攻击变得不那么有用

此外,您应该使用参数化查询

于 2012-12-12T21:57:26.357 回答
0

是个好主意。出于安全原因,最好不要让用户登录。一个想法是拥有一个您控制的中央管理员帐户,然后让用户通过邮件将他们的内容发送给您。这样,您可以确定没有其他人可以访问。

于 2012-12-13T19:32:20.493 回答
-1

正如您所说,如果要执行此操作,您需要维护多个数据库连接。尽管对数据库进行沙箱化是一个不错的想法,但 99% 的具有用户注册的数据库驱动的网站将存储用户的内容。

于 2012-12-12T20:56:26.197 回答