如何在roleManager ASP.NET中读取加密的连接字符串

如何在roleManager ASP.NET中读取加密的连接字符串,asp.net,encryption,web-config,Asp.net,Encryption,Web Config,请帮助,我不知道如何在ASP.NET中使用带有RoleManager的加密连接字符串 这是Web.config中的代码 <connectionStrings> <add name="strConnectionString" connectionString="eF8w9r2UJOsk0Ps3pxmV7/Fy/xPR2hN2S7BrC1iOYNnAUaI8AqkSm5bw7r+ta4sePWSV9t/3Spnpz6wsFpvMmcppNpqM5Zk7iiDqWVgIV4k

请帮助,我不知道如何在ASP.NET中使用带有RoleManager的加密连接字符串 这是Web.config中的代码

<connectionStrings>
    <add name="strConnectionString" connectionString="eF8w9r2UJOsk0Ps3pxmV7/Fy/xPR2hN2S7BrC1iOYNnAUaI8AqkSm5bw7r+ta4sePWSV9t/3Spnpz6wsFpvMmcppNpqM5Zk7iiDqWVgIV4k="/>    
</connectionStrings>

<roleManager enabled="true" defaultProvider="CustomizedRoleProvider">
  <providers>
    <add connectionStringName="strConnectionString" name="CustomizedRoleProvider" type="System.Web.Security.SqlRoleProvider" />
  </providers>
</roleManager>   
<membership defaultProvider="CustomizedMembershipProvider">
  <providers>
    <add connectionStringName="strConnectionString" name="CustomizedMembershipProvider" type="System.Web.Security.SqlMembershipProvider"/>
  </providers>
</membership>
如果我像这样更改我的连接字符串,它正在工作

 <add name="strConnectionString" connectionString="server=My-PC\\MSSQL2008; database=MyDB; uid=sa; pwd=passw0rd;"/>
有谁能帮我找到它或者给我什么建议吗?

为什么不直接使用它呢?它是为你而建的


如果您真的想使用自己的,您是如何创建加密字符串的?我假设您正在使用第三方库,如,因为System.Security命名空间中不存在该方法。我的猜测是,您以提供密钥的方式对其进行了加密,但在解密时,您没有使用相同的密钥,或者解密方法被破坏。如果不了解更多关于该库的信息,就很难说清楚。

我不确定这是否与您使用角色成员资格提供程序有关

在解密值之前,您正在请求一个对象

ConfigurationManager.ConnectionStrings[ConnectionStringKey].ConnectionString
代码试图自动解析它通常会在未加密的连接字符串中找到的关键字对。您的错误是它无法识别关键字,因为您的加密版本没有任何关键字对

您需要获取配置值,解密它,然后创建它所代表的
ConnectionStringSettings
对象。然后,您可以从中访问
ConnectionString
属性

假设您的解密方法可以访问必要的加密密钥,请尝试以下操作:

  string ConnectionStringKey = "strConnectionString";
  string encryptedConnection = ConfigurationManager.ConnectionStrings[ConnectionStringKey].ToString();
  string unencryptedConnection = Security.DecryptString(encryptedConnection);

  ConnectionStringSettings connection = new ConnectionStringSettings("SQL", unencryptedConnection);
  string SQLConnectionString = connection.ConnectionString;

您可能应该将其封装在一些异常处理中,但我希望您能理解。

@SilverbackNet:是的,看起来和您所说的一样,在库中,我有一个包含加密和解密方法的类安全性。当连接到DB时,我使用SQLHelper获取配置值并解密它。所有的项目工作没有问题。但是,当我处理角色和成员身份时,我发现不能使用默认配置RoleManager和成员身份,正如您所说,System.Security命名空间中不存在读取ConnectionString Encrypted的方法。所以我应该用另一种方法来重新创建RoleProvider和MembershipProvider覆盖所有方法。在
Web.config中
将进行如下更改:

namespace Library.Roles
{
  public class MyRoleProvider : RoleProvider
  {
     //code override all method in Roles
  }
}

namespace Library.Membership
{
  public class MyMembershipProvider : MembershipProvider
  {
     //code override all method in MembershipProvider
  }
}
web.config

 <roleManager enabled="true" defaultProvider="MyRoleProvider">
      <providers>
        <add connectionStringName="strConnectionString" name="MyRoleProvider" type="Library.Roles.MyRoleProvider" />
      </providers>
    </roleManager>   
    <membership defaultProvider="MyMembershipProvider">
      <providers>
        <add connectionStringName="strConnectionString" name="MyMembershipProvider" type="Library.Membership.MyMembershipProvider"/>
      </providers>
    </membership>

相关抱歉,可能您不理解我的问题,我不会谈论如何加密ConnectionString或向现有数据库添加成员资格提供程序。我的问题是如何在RoleManager中使用加密的ConnectionString。你以前试过吗?我没有,但我不认为“connectionstring”可以有这种格式/语法。:)在你想帮助别人之前,你应该了解更多
  string ConnectionStringKey = "strConnectionString";
  string encryptedConnection = ConfigurationManager.ConnectionStrings[ConnectionStringKey].ToString();
  string unencryptedConnection = Security.DecryptString(encryptedConnection);

  ConnectionStringSettings connection = new ConnectionStringSettings("SQL", unencryptedConnection);
  string SQLConnectionString = connection.ConnectionString;
namespace Library.Roles
{
  public class MyRoleProvider : RoleProvider
  {
     //code override all method in Roles
  }
}

namespace Library.Membership
{
  public class MyMembershipProvider : MembershipProvider
  {
     //code override all method in MembershipProvider
  }
}
 <roleManager enabled="true" defaultProvider="MyRoleProvider">
      <providers>
        <add connectionStringName="strConnectionString" name="MyRoleProvider" type="Library.Roles.MyRoleProvider" />
      </providers>
    </roleManager>   
    <membership defaultProvider="MyMembershipProvider">
      <providers>
        <add connectionStringName="strConnectionString" name="MyMembershipProvider" type="Library.Membership.MyMembershipProvider"/>
      </providers>
    </membership>