1

我使用Visual Web Developer 2010 Express创建了一个小型Web应用程序。在我部署了我的网站并转到第一页,即提供应用程序用户列表的登录页面后,出现此错误:Membership.GetAllUsers()System.Data.SqlClient.SqlException:用户没有执行此操作的权限

异常详细信息:System.Data.SqlClient.SqlException:用户没有有权执行此操作。

源错误:

Line 22:   public ActionResult LogOn() 
Line 23:   { 
Line 24:    var users = Membership.GetAllUsers().Cast<MembershipUser>().ToList(); 
Line 25:    SelectList usernames = new SelectList(users); 
Line 26:    ViewBag.UserNames = usernames; 

这里是我的ConnectionStrings设置:

<connectionStrings> 
    <add name="ApplicationServices" 
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" 
    providerName="System.Data.SqlClient" /> 
</connectionStrings> 

为什么发生这个错误?任何帮助深表感谢。我目前正在Windows 2008 Server上开发它,并在同一台机器上测试它的部署。

+0

这听起来像您的连接字符串指定的用户没有权限从users表中进行选择。 – 2013-04-10 20:38:13

+0

@JeremyHolovacs我正在开发和测试同一台机器上的部署。当我在Visual Web Developer中调试它时,它工作正常。我需要用SQL Server Express来获得许可才能工作? – massaskillz 2013-04-10 20:54:39

+0

您使用SSPI(可信连接)吗?我将在您的应用程序服务数据库上创建一个具有读/写访问权限的Sql User帐户,并在连接字符串中使用该凭证。 – 2013-04-10 20:56:13

回答

1

我发现我的连接字符串的问题。它的成立,为用户实例化,而根据这个微软article

Web applications running on IIS 7.5 and that rely on SQL Server Express user instancing will fail to run using the default IIS 7.5 security configuration on both Windows 7 Client and Windows Server 2008 R2

文章还建议避免在生产用户实例的使用。我发现这个post帮助我在正常的。\ SQLExpress实例中托管数据库。我改变了我的连接字符串:

<connectionStrings> 
    <add name="ApplicationServices" 
    connectionString="Database="app_users";Data Source=.\SQLEXPRESS;Initial Catalog=app_users;Integrated Security=SSPI;" 
    providerName="System.Data.SqlClient"/> 
</connectionStrings> 

改变上述连接字符串之前,我附着在SQL Server Express的ASPNETDB.MDF文件到一个新的数据库中,我创建一个名为“APP_USERS”。

我不再收到权限错误。

+0

我正面临同样的问题。然后,我只是在我的连接字符串中删除'User Instance = true'。喔,工作就像一个魅力。谢谢你的提示。 +1 – Han 2013-11-29 07:53:38

相关问题