我是一个web开发新手,我希望有更多经验的人可以帮助解决这个问题。我被MySQL升级伏击了。
背景:我有两台XP电脑(让我们大胆地称它们为"web服务器"one_answers"MySQL服务器")。我最近构建并成功托管了一个从MySQL数据库提取数据的asp.net站点。这只是一个为少数本地用户设计的网站,所以他们不需要学习SQL来获取数据……没有什么幻想。到目前为止一切顺利。
问题:这周我在"web服务器"上安装了MySQL,然后事情就变得疯狂了。在此之前,web服务器上还没有MySQL的实例。自安装以来,我已经:
- …重新安装MySQL .NET提供程序
- …重新配置机器。配置文件
- …将MySQL_Web.dll拷贝到MySQL bin目录
- …试图使设置与下面网站的说明对齐。
这解决了许多问题,我使网站部分恢复并再次运行。我可以访问登陆页面,并且客人用户的查询返回数据ok。
错误信息#1然而,当用户试图登录访问网站上的私人页面时,我得到错误"拒绝用户访问"@'localhost'(使用密码:NO)"。这显然是错误的,因为我使用密码,因为没有连接字符串指向本地主机/web服务器。唯一的连接字符串指向数据库所在的MySQL服务器。
错误信息#2我还查看了安全选项卡中的asp.net网站管理工具,并看到以下错误:
"您选择的数据存储有问题。这可能是由于无效的服务器名称或凭据或权限不足造成的。它也可能是由未启用角色管理器特性引起的。单击下面的按钮将被重定向到可以选择新数据存储的页面。以下消息可能有助于诊断问题:发生了异常。"
角色管理器已明确启用,并且提供者已正确设置。
我已经尝试在web服务器上卸载MySQL,重新创建网站的用户表,刷新特权和其他一些技巧,但该网站现在似乎在登录过程中永久绕过连接字符串中的db,而是搜索web服务器。
有谁知道我接下来该怎么做吗?这几天我都被难住了,我不知道还能做些什么。
编辑:按下面评论中的要求提供相关代码。如上所述,这些都是作为默认项目的一部分生成的标准代码,并且没有以任何方式进行编辑(除了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>
解决。希望这能帮助其他有类似问题的人,并在此过程中缓解一些偏头痛。一周的极度恐慌让我在一切都失败的情况下寻求上帝的干预,所以楼上的大个子得到了这个标记。:)
: 重新安装MySQL和。net连接器意味着机器。配置文件自定义被覆盖。
解决方案:更新之后,请确保在机器中进行了以下两个更改。配置文件…
(1)
<membership>
<providers>
<add name="MySQLMembershipProvider" **autogenerateschema="true"** ... />
</providers>
</membership>
(2)
<connectionStrings>
<add name="LocalMySqlServer" connectionString="server=dbServer;User Id=myUserID;password=myPassword;database=myDatabase" />
</connectionStrings>
让我绊倒的是第二个。在重新安装期间,代码已更改为…
<connectionStrings>
<add name="LocalMySqlServer" connectionString="" />
</connectionStrings>
…这就是为什么网站试图连接到本地主机,以及为什么用户信息在网络上。配置连接字符串被忽略