保护ASP.Net站点的SQL数据库帐户

时间:2009-09-18 17:17:49

标签: asp.net sql-server database security

我正在尝试为.Net网站保护MSSQL数据库。

我想将数据库分成不同的模式,以便我们有一个类似'Account'的模式,其中包含个人信息,以及像'Public'这样具有通用公共内容数据的模式。

这些模式中的每一个都将使用不同的SQL用户帐户进行访问,并且每个模式都需要自己的DBML,因为它们需要单独的连接字符串(我们使用的是LINQtoSQL)。

我的同事声称,因为我们只是在web.config中拥有这两个帐户,所以这种设计并不比仅使用一个可访问整个数据库的SQL服务器帐户更安全。由于我们没有使用基于Windows的身份验证,因此无需分离模式。

所以我的问题是谁是正确的?将数据库分成模式会更安全吗?或者是浪费时间,因为两个SQL帐户都位于web.config中(即使加密)?

3 个答案:

答案 0 :(得分:1)

你的同事在某个层面上是错误的而在另一个层面上是错误的。

根据您的建议将数据库分解为模式将有助于能够找到SQL注入缺陷之类的攻击者。如果您勤于设置权限,那就是......

但是,如果有人设法进入实际的文件系统并且可以重新启动web.config,那么拆分这样的模式不会带来额外的好处。

您需要考虑所有可能的图层。

如果您还没有,请查看以下资源:

http://msdn.microsoft.com/en-us/library/ms998372.aspx

此外,尝试谷歌搜索存储您的连接字符串在注册表中。有一些很好的参考,如果有人进入文件系统并且可以读取你的web.config,这将有助于保护你。

最后,不要忘记加密你的web.config ......

答案 1 :(得分:1)

如果攻击媒介是SQL注入,则分隔帐户将降低风险。攻击者只能执行会话特权允许进行注入的任何操作。据推测,只有经过身份验证的攻击者才能使用“帐户”会话作为注入向量,因此可能会被检测到,因为可以从执行此操作的日志中发现它。这种分离是对威胁的有效遏制,它很大程度上取决于你遗漏的信息,最重要的是你如何分开对代码中两个区域的访问。

在web.config中包含两个连接字符串意味着如果ASP池本身被泄露,那么攻击者可以使用这两个字符串。

我认为字符串是加密的,请参阅Encrypting Configuration Information Using Protected Configuration。这样,如果web.config泄露,至少连接信息不会丢失。

答案 2 :(得分:0)

如果您加密帐户所在的部分,我看不出会出现什么问题。唯一的问题可能是连接池,它会将池分成2个就是它。