Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 保护SQL Server 2008R2数据库的安全_Asp.net_Sql Server_Security_Database Design_Encryption - Fatal编程技术网

Asp.net 保护SQL Server 2008R2数据库的安全

Asp.net 保护SQL Server 2008R2数据库的安全,asp.net,sql-server,security,database-design,encryption,Asp.net,Sql Server,Security,Database Design,Encryption,我们将开发一个ASP.NET应用程序。它将在SQL Server 2008 R2安装中存储数据。大多数数据都是敏感数据,因此安全性是首要问题。 我们将在一个共享的环境中托管它,设计目标是数据在被盗情况下不可读 我正在考虑以下设置: 使用TDE加密整个数据库。用户是在SQL Server Users表中创建的,当用户通过web界面登录时,我们会对其进行身份验证。 其目的是,如果有人访问数据库,他们将无法使用数据。并且不需要在web.config文件中存储具有用户凭据的连接字符串 你认为这种方法有什

我们将开发一个ASP.NET应用程序。它将在SQL Server 2008 R2安装中存储数据。大多数数据都是敏感数据,因此安全性是首要问题。
我们将在一个共享的环境中托管它,设计目标是数据在被盗情况下不可读

我正在考虑以下设置: 使用TDE加密整个数据库。用户是在SQL Server Users表中创建的,当用户通过web界面登录时,我们会对其进行身份验证。
其目的是,如果有人访问数据库,他们将无法使用数据。并且不需要在
web.config
文件中存储具有用户凭据的连接字符串


你认为这种方法有什么缺点吗?那么,根据所描述的SQL Server进行身份验证有多容易?

我认为在共享环境中使用TDE不是一个好主意

其整体思想是使用内部服务器上的加密主密钥(或证书私钥)使加密/解密对外部用户透明,并由您、服务器所属和保护,防止在没有该密钥的情况下在另一台服务器上恢复加密数据库。 但共享托管服务器不是您的服务器,您无法控制对它的访问,甚至更频繁地对系统文件夹/文件或数据库进行更改或写入。你应该和你的主人商量一下。
但是,如果一个共享托管客户机将被给予一个例外,那么将有另一个例外,分别访问公共系统限制的功能和区域

无论如何,来自hoster系统管理员或Roundound workers的任何人都可以使用您的主密钥访问您的数据库,以便在另一台服务器上还原和读取它

然后,TDE是SQL Server企业版的功能,共享主机通常提供快速版。共享企业版服务器没有多大意义

更新:@Martin Wiboe,
我不确定我是否明白你的意思和你的问题

数据库加密密钥使用服务主密钥加密(后者受Windows DPAPI保护),但在这种分片环境中没有意义,因为内存和在线数据都未加密,而主服务密钥是例如(服务器)的主服务密钥。
因此,它应该可以在共享主机上的所有用户之间共享。
您不能“锁定”/“解锁”密钥,因为它是透明的数据加密
请注意,如果其中一个数据库是TDE ed,则tempdb系统数据库是加密的。这对于共享主机没有多大意义

1)
软件生成的密钥是可破解的,这只是持久性/欲望与时间阈值的问题。 只有通过硬件生成和硬件存储的密钥才能确保真正的安全性。因此,共享主机不在考虑之列
2)
您可能想考虑放弃DBMS加密并在客户端加密数据。 尽管这种方法有一些缺点,即不能在服务器端使用SQLServer进行搜索、优化传输、处理等。那么,这种数据库管理系统有什么意义呢

最终,这一切归结为这样一个事实:使用共享托管服务器没有多大意义

我们将开发一个ASP.NET 应用它将数据存储在 SQLServer2008R2安装。最 数据的安全性是敏感的,所以 这是一个主要问题。我们会 将其托管在共享环境中, 这是一个设计目标,数据 在以下情况下应不可读: 盗窃

好了,我不再笑了。基本上你试着做一块素食牛扒

无论哪种安全性都是您最关心的问题,那么您都不应该使用共享托管方案,而是应该在经过认证的数据中心中运行,该数据中心位于一个单独的锁定机架中,并且主机没有管理访问权限。在这种情况下,您将使用更高版本的SQL Server,并使用光盘加密+安全系统(TPM芯片),以确保被盗后光盘上的数据无法读取。重点

或者安全性不是您的问题,那么您可以使用共享主机提供商

其他的都是废话。“不,水刑不是酷刑,因为它不会造成身体伤害”类型的论证

您的问题是:您无法阻止对数据的访问。由于您的应用程序必须能够读取未加密的数据,因此可以访问tp encrypt使用的密钥。。。任何闯入您的应用程序的人都可以访问密钥(这就是为什么TPM这么好的原因——这是安全的硬件,无法访问密钥)

你可以通过各种有趣的论据来回避这个事实,但是如果数据被盗,这些论据将不会在任何法律讨论中成立。再加上这个,你会看起来很糟糕

用户是在SQL Server中创建的 用户表,我们进行身份验证 当用户通过 web界面。目的是 如果有人进入数据库, 他们将无法使用这些数据。 并且没有与用户的连接字符串 凭据将需要存储在中 web.config文件

好吧,我偷了数据库。我还偷了你的身份验证机制。你到底取得了什么成就?除了杀死你的搜索功能?当我拥有数据库时,我拥有users表,我可以以某种方式作为用户进行身份验证。如果我还偷了应用程序,我会得到所有东西,甚至是代码


除非您有一种特殊情况,您没有应用程序密钥(比如LastPass,它本身不知道如何在服务器端解密数据)。共享主机环境没有合适的硬件级别。这里有一个明显的问题。您的应用程序需要能够读取和理解数据。因此,如果有人能够干扰您的应用程序