C#Web App与SQL Server的安全连接

时间:2014-04-03 20:12:26

标签: c# sql-server

我想知道与SQL Server建立安全连接的最佳方法是什么?这是我的情景。在我的工作中,我们有SQL Server 2012 Standard。我的老板想让我用TDE创建一个新的数据库。我发现你必须拥有企业版才能使用TDE。我们调查了它,它将花费一大笔钱,所以我们不打算购买企业版。所以我在考虑使用存储过程与DB进行交互。这比通过Web提交SQL查询更安全吗?此外,与Web应用程序/数据库服务器进行通信和传输数据的最佳安全措施是什么?

提前致谢,

布拉德

编辑: 另外,无论如何都要在连接字符串中安全地发送用户名/密码凭证吗?

2 个答案:

答案 0 :(得分:0)

存储过程在某种意义上更安全,因为您只需将对象提交到过程中即可生成所需的结果。这将掩盖底层的SQL语句,因此可以认为它更安全。我认为大多数地方依赖于域环境中SQL的Windows身份验证方面。

这是相当安全的,如果您的网站包含在SSL中则更为安全。避免使用标准的SQL身份验证,它是基于文本的,不应该真正考虑。

代码方面,你可能希望在你的数据库和你的网站之间有一个层来完成所有繁重的工作。这有点混淆了你的网站正在做什么,因为它正在打电话给你的中间人,他处理所有真正的交易内容。

此外,用户如何与您的网站进行互动?他们是否需要先登录,有什么机制可以控制这个?在您真正考虑哪种方法将是安全性和可用性的最佳平衡之前,还有很多其他设计细节要弄清楚。我会使用WindowsAuth / SSL并使用安全帐户来执行所有交易。设置简单,AFAIK不易破解。

答案 1 :(得分:0)

这是两个不同的东西--TDE将帮助您加密文件系统上的数据(因此,如果我有权访问您拥有数据库的文件系统,如果您使用TDE,我将无法读取它)。

应用程序和数据库之间的通信是不同的问题。你可以做几件事:

  • 为网络服务器打开db的网络端口(只能从可以访问db的Web服务器ip)
  • 使用集成身份验证(没有人可以嗅探您的密码)
  • 将您的业务逻辑嵌入到存储过程中(您只能将对数据库的访问限制为Web应用程序范围所需的功能)

然而,特别是存储过程部分可能很痛苦(ORM就像EF,LinqToSQL或nHibernate在存储过程方面都很糟糕)。而且这种方法并不能保证没有人能够看到从数据库服务器到Web服务器的数据。)

如果在Web服务器和数据库服务器之间嗅探数据可能会出现问题,则必须编写用于访问数据的Web服务。这个web服务应该在可信网络到数据库服务器上(尽可能接近数据库 - 同样的盒子是最好的)。 Web服务器应该通过https调用此Web服务(因此无法在Web服务器和Web服务之间嗅探数据)并使用身份验证来访问Web服务(建议使用Windows身份验证)。