我有一个使用内置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是相同的,我在开发过程中使用服务器上的数据库。
答案 0 :(得分:5)
长话短说: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