为什么ASP.NET忽略我的Membership连接字符串?

时间:2010-02-19 01:54:34

标签: asp.net sql-server sql-server-2005 asp.net-membership

我有一个使用内置Membership功能的ASP.NET应用程序。因此,我的web.config中有一个连接字符串,如下所示:

<add name="MembershipSqlServer" connectionString="Data Source=servername;Database=aspnetdb;uid=user;pwd=password;" />

在我的开发机器上工作时,一切都很好看。但是,当我将内容移动到Web服务器(也恰好运行SQL Server)时,我在调用User.IsInRole()时出现此错误:

System.Data.SqlClient.SqlException:用户'NT AUTHORITY \ NETWORK SERVICE'登录失败。

F $%*&安培;!为什么尝试以这种方式连接?为什么不使用连接字符串中的用户/密码?开发和服务器上的Web.config是相同的,我在开发过程中使用服务器上的数据库。

4 个答案:

答案 0 :(得分:5)

好吧,我想通了......只有35分钟。 :P

长话短说:asp.net会员有两个部分......一个会员提供者和一个ROLE提供者。你为什么要把这两件事分开,我不知道......但是我的web.config没有指定角色提供者和连接字符串,所以它默认为机器中的设置。 config(又名LocalSqlServer连接字符串)。

所以这一次,我的应用用户都在服务器上......但角色存储在App_Data中的本地.MDF文件中。啊。

答案 1 :(得分:0)

web.config中的成员资格提供程序部分是什么样的?您是否可能遗漏了connectionStringName属性?在这种情况下,我相信它会尝试使用集成安全性连接到本地计算机上的数据库。

web.config中的成员资格提供程序部分应如下所示:

<membership defaultProvider="SqlProvider">
  <providers>
    <add 
      name="SqlProvider" 
      type="System.Web.Security.SqlMembershipProvider" 
      connectionStringName="MembershipSqlServer"
      ...
    />
  </providers>
</membership>

答案 2 :(得分:0)

你在web.config中看到这个<authentication mode="Windows" />吗?而你的另一个connectionString使用Integrated Security = True;在您的Sql服务器上,为了使用Windows身份验证,您必须为Windows用户或组登录(在服务器上),并在数据库中具有关联的用户。

简单但未建议的修复方法是为'NT AUTHORITY \ NETWORK SERVICE'创建一个登录名 在您的SQL服务器上,然后在您的特定数据库中的用户映射到该登录。 安全的方法是为需要访问sql server的每个网络安全组执行此操作,以便您可以独立管理组权限。

答案 3 :(得分:-1)

我认为答案是:

 public static string ConnectionString(SPSite site)
        {
            var connectionStringField = BaseMembershipProvider(site).GetType().GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
            if (connectionStringField != null)
            {
                return connectionStringField.GetValue(BaseMembershipProvider(site)).ToString();
            }
            else
            {
                return "";
            }
        }

对我来说没有任何错误

感谢babania