我是一名网络开发新手,我希望有更多经验的人可以帮助解决这个问题。我被 MySQL 升级伏击了。
背景: 我有两台 XP PC(让我们雄心勃勃地称它们为“Web 服务器”和“MySQL 服务器”)。我最近构建并成功托管了一个从 MySQL 数据库中提取数据的 asp.net 站点。它只是为少数本地用户设计的站点,因此他们不必学习 SQL 即可获取数据……没什么特别的。到目前为止,一切都很好。
问题: 这周我在“网络服务器”上安装了 MySQL,然后事情就变得疯狂了。在此之前,Web 服务器上没有 MySQL 实例。自安装以来,我已经:
- ...重新安装 MySQL .NET 提供程序
- ...重新配置 machine.config 文件
- ...将 MySQL_Web.dll 复制到 MySQL bin 目录
- ...尝试使设置与以下站点中的说明保持一致。
http://dev.mysql.com/doc/refman/5.0/en/connector-net-tutorials-asp-roles.html
这解决了许多问题,我让网站部分启动并再次运行。我可以访问登录页面,并且对来宾用户的查询返回数据正常。
错误消息 #1 但是,当用户尝试登录以访问站点上的私人页面时,我收到错误"Access denied for user ''@'localhost' (using password: NO)"。这显然是错误的,因为我使用的是密码,并且没有指向 localhost/web 服务器的连接字符串。唯一的连接字符串指向数据库所在的 MySQL 服务器。
错误消息 #2 我还在查看安全选项卡中的 asp.net 网站管理工具,并看到以下错误:
"您选择的数据存储有问题。这可能是由于服务器名称或凭据无效或权限不足造成的。也可能是未启用角色管理器功能造成的。单击下面的按钮可重定向到您可以在其中选择新数据存储的页面。以下消息可能有助于诊断问题:发生异常。请检查事件日志。 “
角色管理器肯定已启用,并且提供程序已正确设置。
我已经尝试在 Web 服务器上卸载 MySQL,重新创建站点的用户表,刷新权限和其他一些技巧,但现在该站点似乎在登录过程中永久绕过连接字符串中的 db 并搜索 Web 服务器反而。
有没有人有任何想法我可以在哪里采取这个?我已经被难住了几天,我不知道我还能做什么。
编辑:按照以下评论中的要求提供相关代码。如前所述,这是作为默认项目的一部分生成的所有标准代码,并且没有以任何方式进行编辑(当然 web.config 除外)。
网页配置
<connectionStrings>
<remove name="MySQLWebConnection"/>
<add name="MySQLWebConnection" connectionString="server=myWebServer;User Id=myName;password=myPwd;database=myDB" providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
<system.web>
<membership defaultProvider="MySQLMembershipProvider" />
<roleManager enabled="true" defaultProvider="MySQLRoleProvider" />
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="~/Account/Login.aspx" defaultUrl="~/Default.aspx" />
</authentication>
...
</system.web>
登录.aspx
<asp:Login ID="LoginUser" runat="server" EnableViewState="false" RenderOuterTable="false">
<LayoutTemplate>
<span class="failureNotification">
<asp:Literal ID="FailureText" runat="server"></asp:Literal>
</span>
<asp:ValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="failureNotification"
ValidationGroup="LoginUserValidationGroup"/>
<div class="accountInfo">
<fieldset class="login">
<legend>Account Information</legend>
<p>
<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Username:</asp:Label>
<asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
CssClass="failureNotification" ErrorMessage="User Name is required." ToolTip="User Name is required."
ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
</p>
<p>
<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
<asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
CssClass="failureNotification" ErrorMessage="Password is required." ToolTip="Password is required."
ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
</p>
<p>
<asp:CheckBox ID="RememberMe" runat="server" Visible="false" />
<asp:Label ID="RememberMeLabel" runat="server" Visible="false" AssociatedControlID="RememberMe" CssClass="inline">Keep me logged in</asp:Label>
</p>
</fieldset>
<p class="submitButton">
<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" ValidationGroup="LoginUserValidationGroup"/>
</p>
</div>
</LayoutTemplate>
</asp:Login>