我正在尝试为.Net网站保护MSSQL数据库。
我想将数据库分成不同的模式,以便我们有一个类似'Account'的模式,其中包含个人信息,以及像'Public'这样具有通用公共内容数据的模式。
这些模式中的每一个都将使用不同的SQL用户帐户进行访问,并且每个模式都需要自己的DBML,因为它们需要单独的连接字符串(我们使用的是LINQtoSQL)。
我的同事声称,因为我们只是在web.config中拥有这两个帐户,所以这种设计并不比仅使用一个可访问整个数据库的SQL服务器帐户更安全。由于我们没有使用基于Windows的身份验证,因此无需分离模式。
所以我的问题是谁是正确的?将数据库分成模式会更安全吗?或者是浪费时间,因为两个SQL帐户都位于web.config中(即使加密)?
答案 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个就是它。