asp.net / MySQL: доступ запрещен для пользователя ''@'localhost' (используется пароль: НЕТ)
Я новичок веб-разработки, и я надеюсь, что кто-то с большим опытом может помочь разобраться в этом. Я попал в засаду обновления MySQL.
Предыстория: у меня есть два компьютера с XP (давайте честно называть их "веб-сервер" и "сервер MySQL"). Я недавно создал и успешно разместил сайт asp.net, который черпал данные из базы данных MySQL. Это просто сайт, предназначенный для нескольких локальных пользователей, поэтому им не нужно изучать SQL для получения данных... ничего особенного. Все идет нормально.
Проблема: на этой неделе я установил MySQL на "веб-сервере", и вот тогда все сошло с ума. До этого момента на веб-сервере не было ни одного экземпляра 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 Однако, когда пользователь пытается войти в систему для доступа к частным страницам на сайте, я получаю сообщение об ошибке "Доступ запрещен для пользователя ''@'localhost' (используя пароль: НЕТ)". Это явно неправильно, так как я использую пароль и потому что нет строки подключения, указывающей на локальный хост / веб-сервер. Единственная строка соединения указывает на сервер MySQL, где находится база данных.
Сообщение об ошибке № 2 Я также смотрю на инструмент администрирования веб-сайта asp.net на вкладке Безопасность и вижу следующую ошибку:
"Существует проблема с выбранным хранилищем данных. Это может быть вызвано неверным именем или учетными данными сервера или недостаточным разрешением. Это также может быть вызвано тем, что функция диспетчера ролей не включена. Нажмите кнопку ниже, чтобы перейти к страница, где вы можете выбрать новое хранилище данных. Следующее сообщение может помочь в диагностике проблемы: Возникла исключительная ситуация. Пожалуйста, проверьте журнал событий."
Менеджер ролей определенно включен, и провайдеры настроены правильно.
Я попытался удалить MySQL на веб-сервере, воссоздать пользовательские таблицы сайта, очистить привилегии и несколько других хитростей, но теперь сайт, кажется, постоянно обходит базу данных в строке подключения во время входа в систему и поиска на веб-сервере. вместо.
У кого-нибудь есть идеи, где я могу взять это дальше? Я был в тупике в течение нескольких дней, и я не знаю, что еще я могу сделать.
Редактировать: предоставив соответствующий код, как указано в комментариях ниже. Как уже отмечалось, это весь стандартный код, сгенерированный как часть проекта по умолчанию, и он никак не редактировался (за исключением, конечно, web.config).
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>
Login.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>
1 ответ
Решаемые. Надеемся, что это помогает кому-то еще с подобными проблемами, и облегчает несколько мигрени по пути. Неделя чистой паники оставила меня в поисках божественного вмешательства, когда все остальное не удалось, поэтому крупный парень наверху получает галочку для этого.:)
Причина. Переустановка MySQL и коннектора.NET означала, что настройки файла machine.config были перезаписаны.
Решение. После обновлений убедитесь, что в файле machine.config имеются следующие два изменения...
(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>
... именно поэтому сайт пытался подключиться к localhost, и поэтому информация о пользователе в строке подключения web.config игнорировалась.