2013-03-21 4 views
1

저는 웹 개발 신참이며 더 많은 경험을 가진 사람이이 문제를 해결할 수 있기를 바랍니다. 나는 MySQL 업그레이드에 의해 습격 당했다.asp.net/MySQL : 사용자 '@'localhost '에 대한 액세스가 거부되었습니다 (암호 : 아니요)

배경 : 두 대의 XP PC가 있습니다 (야심적으로 "웹 서버"및 "MySQL 서버"라고 함). 나는 최근에 MySQL 데이터베이스에서 데이터를 가져온 asp.net 사이트를 구축하고 성공적으로 호스팅했습니다. 이 사이트는 소수의 로컬 사용자를 위해 설계된 사이트이므로 데이터를 얻기 위해 SQL을 배울 필요가 없습니다 ... 멋진 것은 아닙니다. 여태까지는 그런대로 잘됐다.

문제점 : 이번 주에 나는 "웹 ​​서버"에 MySQL을 설치했는데, 그 때가 미쳐 버렸습니다. 그 전에는 웹 서버에 MySQL의 인스턴스가 없었습니다. 설치 이후 나는했습니다 :

  1. 이 ... ... MySQL의 .NET 공급자
  2. 를 다시 설치 machine.config 파일
  3. 을 재구성 ... MySQL의 bin 디렉토리에 MySQL_Web.dll 복사
  4. ... 설정을 아래 사이트의 지시 사항과 일치 시키려고 시도했습니다. http://dev.mysql.com/doc/refman/5.0/en/connector-net-tutorials-asp-roles.html

이 문제들을 해결하고, 나는 부분까지 다시 실행하는 사이트를 얻었다. 방문 페이지에 액세스 할 수 있으며 게스트 사용자에 대한 쿼리가 데이터를 반환합니다. 사용자가 사이트에 개인 페이지에 액세스하기 위해 로그인을 시도 할 때

는 오류 메시지 # 1 그러나, 나는 (암호를 사용하여 : NO) "액세스가 '@'localhost를 '사용자가 거부 오류를 얻을 ". 이것은 암호를 사용하고 있기 때문에 그리고 localhost/web 서버를 가리키는 연결 문자열이 없기 때문에 분명히 잘못되었습니다. 유일한 연결 문자열은 데이터베이스가있는 MySQL 서버를 가리 킵니다.

오류 메시지 # 2 나는 또한 보안 탭에서 asp.net 웹 사이트 관리 도구를보고 다음과 같은 오류를보고 있어요 :

"선택한 데이터 저장소에 문제가 있습니다 이것은 잘못된 서버 이름이나 자격 증명 또는 불충분 한 권한으로 인해 발생할 수 있습니다. 또한 역할 관리자 기능을 사용할 수 없기 때문에 발생할 수 있습니다. 아래 버튼을 클릭하여 새 데이터 저장소를 선택할 수있는 페이지로 리디렉션됩니다. . 다음 메시지는 문제를 진단하는 데 도움이 될 수 있습니다 : 예외가 발생했습니다. 이벤트 로그를 확인하십시오. "

역할 관리자가 올바르게 설정되어 있고 공급자가 올바르게 설정되어 있습니다.

웹 서버에서 MySQL을 제거하고 사이트의 사용자 테이블을 다시 만들고 권한을 플러시하고 몇 가지 트릭을 시도했지만 사이트가 로그인 과정에서 연결 문자열의 db를 영구적으로 우회하는 것 같습니다. 대신 웹 서버를 검색하십시오.

누구나 내가 다음에 할 수있는 아이디어가 있습니까? 나는 며칠 동안 곤란을 겪었고, 내가 무엇을 할 수 있는지 모른다.


편집 : 아래의 코멘트 요청으로 관련 코드를 공급. 언급했듯이 이것은 기본 프로젝트의 일부로 생성 된 모든 표준 코드이며 어떤 방식 으로든 편집되지 않았습니다 (물론 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

그 오류 메시지는 사용자 이름도 사용하고 있지 않음을 보여줍니다. 사용자 이름과 암호를 설정하는 코드를 게시 할 수 있습니까 (예 : 일반 텍스트 일 ​​경우 ****로 공백으로 표시). 연결을 시도합니까? 지금은 코드 문제처럼 보입니다. –

+0

내기를 걸었습니다. 어떤 신참 선수와 마찬가지로, 나는 코드를 사용하고있다. web.config가 변경된 것 외에도 모든 코드는 기본 프로젝트의 일부로 생성되었을 때와 똑같습니다. 설치 전에 잘 작동 했으므로 변경되지 않았습니다. 나는 또한 사용자 이름을 입력하고 있음을 확신합니다. :에스 – user2009790

답변

2

. 바라기를이 비슷한 문제를 가진 다른 사람을 돕고, 길을 따라 편두통을 완화. 1 주일의 공포에 빠져 다른 모든 것이 실패했을 때 신성한 개입을 찾았습니다. 그래서 위층에있는 큰 녀석이 이것에 체크 표시를합니다. :)

원인 : MySQL을 다시 설치하면 .NET Connector가 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> 

나를 두근 거리게하는 것은 두 번째 것이 었습니다. 하여 코드를 다시 설치하는 동안이 사이트가 로컬 호스트에 연결을 시도하였고, Web.config의 ConnectionString을에 사용자 정보가 왜 무시 된 이유입니다 ... ...에

<connectionStrings> 
    <add name="LocalMySqlServer" connectionString="" /> 
</connectionStrings> 

을 변경했다.