Asp.net .NET连接到在webconfig中加密的SQL DB

Asp.net .NET连接到在webconfig中加密的SQL DB,asp.net,database,security,Asp.net,Database,Security,我们正在用.NET开发一个应用程序,并连接到windows服务器上的SQL 2008数据库。到目前为止,我们是一个小团队,这意味着以下代码是可以接受的: <add key="ConnectionString" value="Server=00.000.000.00;uid=myUsername;pwd=myPassword;Database=myDatabase" /> 当我想连接到数据库时,就会调用它 我们的团队正在扩大,新开发人员不应该访问数据库凭据。他们可以访问应用程序代码,

我们正在用.NET开发一个应用程序,并连接到windows服务器上的SQL 2008数据库。到目前为止,我们是一个小团队,这意味着以下代码是可以接受的:

<add key="ConnectionString" value="Server=00.000.000.00;uid=myUsername;pwd=myPassword;Database=myDatabase" />
当我想连接到数据库时,就会调用它

我们的团队正在扩大,新开发人员不应该访问数据库凭据。他们可以访问应用程序代码,并且在本地调试模式下运行时,必须连接到非本地服务器上的数据库


允许他们连接到数据库而无需凭据即可打开数据库并查看表的最佳和最快的解决方案是什么?

最快和最简单的解决方案是加密配置文件中的ConnectionString。这也很简单

Open CMD键入以下命令,将目录更改为.NET Framework版本您首选的版本目录:

cd \WINDOWS\Microsoft.Net\Framework\yourversion     
At the command prompt, run aspnet_regiis.exe with the following options:
The -pe option and the string "connectionStrings" to encrypt the connectionStrings element of the Web.config file for your application.
The -app option and the name of your application.
例如,以下命令加密名为MyApplication的应用程序的Web.config文件的部分

aspnet_regiis -pe "connectionStrings" -app "/MyApplication" 
加密的connectionString看起来像

<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
  <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
     xmlns="http://www.w3.org/2001/04/xmlenc#">
     <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
     <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
           <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
           <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
              <KeyName>RSA Key
              </KeyName>
           </KeyInfo>
           <CipherData>
              <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo=
              </CipherValue>
           </CipherData>
        </EncryptedKey>
     </KeyInfo>
     <CipherData>
        <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE=
        </CipherValue>
     </CipherData>
  </EncryptedData>
</connectionStrings>

有关详细信息,请参阅文章

谢谢您的回答,我唯一的问题是,它说Microsoft Internet information Services IIS安装并配置在将承载该站点的计算机上。。如果开发人员正在运行VS2012,并且正在本地主机上运行应用程序,您的答案是否适用?我必须在他们的计算机上安装IIS吗?这似乎需要共享机器键,这意味着新开发人员可以解密连接。开发人员需要对加密密钥进行读取访问。为什么?新开发人员仍然可以使用.NET Framework访问数据库,并且仍然可以发布其登录允许的任何sql语句。@SimonSvensson允许他们访问数据库中的数据不是问题,我们希望阻止他们访问我们创建的存储过程,而不给sql用户访问存储过程的权限。没有任何东西可以阻止他们从sys.procedures中选择*;和EXEC dbo.MySecretProcedure;一旦他们获得数据库连接。@SimonSvensson我不管他们是否有存储过程列表,他们需要从应用程序调用存储过程并在页面上打印数据,我只是不想让他们查看存储过程中的代码。你不能告诉我,在银行软件上工作的每个开发人员都可以访问所有数据库,可以运行他们喜欢的任何查询,这在安全级别上是不可能的Exec sp_helptext“dbo.MyStoredProcedure”;将使用另一个存储过程显示存储过程的内容。我知道有些工具可以解密加密的存储过程,不知道它们是如何做到的。我想说的是,银行业拥有测试数据和sql凭据的测试系统,这些测试系统只允许它们访问执行存储过程。因此,它们无法执行包含的sql语句select、update、。。。因为他们没有这样做的权限。