用户表是否应该位于与网站内容不同的数据库中?

时间:2012-12-12 20:54:48

标签: php mysql database security login

如果之前有人问过,请道歉,但我做了一些搜索,但无法找到问题的答案。

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

也许这是一个愚蠢的问题,但我很感激你的意见!

4 个答案:

答案 0 :(得分:2)

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

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

SELECT onedatabase.table.field, someotherdatabase.table.field
...

答案 1 :(得分:0)

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

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

此外,you should be using parametrized queries

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

正如您所说,如果您要这样做,则需要维护多个数据库连接。虽然对数据库进行打沙是一个很好的想法,但99%的数据库驱动的用户注册网站会为用户存储内容。