1

私はWeb開発の新人であり、経験豊富な人がこれを解決するのに役立つことを願っています。MySQLのアップグレードに待ち伏せされました。

背景: 私は2台のXP PCを持っています(野心的にそれらを「Webサーバー」と「MySQLサーバー」と呼びましょう)。私は最近、MySQLデータベースからデータを取得するasp.netサイトを構築し、正常にホストしました。これは、少数のローカルユーザー向けに設計されたサイトであるため、データを取得するためにSQLを学習する必要はありません...特別なことは何もありません。ここまでは順調ですね。

問題: 今週、MySQLを「Webサーバー」にインストールしましたが、それがおかしくなったときです。その時点まで、Webサーバー上にMySQLのインスタンスはありませんでした。インストール以来、私は:

  1. ...MySQL.NETプロバイダーを再インストールしました
  2. ...machine.configファイルを再構成しました
  3. ...MySQL_Web.dllをMySQLbinディレクトリにコピーしました
  4. ...以下のサイトの指示に合わせてセットアップを取得しようとしました。

http://dev.mysql.com/doc/refman/5.0/en/connector-net-tutorials-asp-roles.html

これにより多くの問題が解決され、サイトを部分的に稼働させました。ランディングページにアクセスでき、ゲストユーザーへのクエリはデータを正常に返しています。

エラーメッセージ#1 ただし、ユーザーがログインしてサイトのプライベートページにアクセスしようとすると、「ユーザー'' @'localhost'のアクセスが拒否されました(パスワード:NOを使用)」というエラーが表示されます。パスワードを使用しているため、またローカルホスト/ Webサーバーを指す接続文字列がないため、これは明らかに間違っています。唯一の接続文字列は、データベースが存在するMySQLサーバーを指します。

エラーメッセージ#2 [セキュリティ]タブのasp.netWebサイト管理ツールも確認しており、次のエラーが表示されます。

選択したデータストアに問題があります。これは、サーバー名または資格情報が無効であるか、権限が不十分であることが原因である可能性があります。また、ロールマネージャー機能が有効になっていないことが原因である可能性があります。下のボタンをクリックしてリダイレクトしてください新しいデータストアを選択できるページ。次のメッセージは、問題の診断に役立つ場合があります。例外が発生しました。イベントログを確認してください。

ロールマネージャーは確実に有効になっており、プロバイダーは正しく設定されています。

WebサーバーでMySQLをアンインストールし、サイトのユーザーテーブルを再作成し、特権をフラッシュし、その他のいくつかのトリックを試しましたが、ログインプロセス中およびWebサーバーの検索中に、サイトが接続文字列のデータベースを永続的にバイパスしているようです。代わりは。

誰かが私がこれを次に取ることができるアイデアを持っていますか?私は数日間困惑していて、他に何ができるかわかりません。


編集:以下のコメントで尋ねられたように関連するコードを提供します。前述のように、これはすべてデフォルトプロジェクトの一部として生成された標準コードであり、編集されていません(もちろん、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>
4

1 に答える 1

2

解決しました。うまくいけば、これは同様の問題を抱えている他の誰かを助け、途中でいくつかの片頭痛を和らげます。1週間のまったくのパニックにより、他のすべてが失敗したときに神の介入を求めたので、2階の大きな男がこのチェックマークを取得しました。:)

原因: MySQLと.NETコネクタを再インストールすると、machine.configファイルのカスタマイズが上書きされました。

解決策: 更新後、machine.configファイルに次の2つの変更が加えられていることを確認してください...

(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>

私をつまずかせたのは2番目でした。再インストール中に、コードは次のように変更されました...

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

...これが、サイトがローカルホストに接続しようとした理由であり、web.config接続文字列のユーザー情報が無視されていた理由です。

于 2013-03-25T21:32:19.780 に答える