我在这个论坛上看了几篇关于这个的帖子,但似乎没什么用。我正在尝试使用最新版本的连接器(6.3.6.0)和VS2010替换默认的基于SQL Server的提供程序与MySQL提供程序,但在访问WSAT中的安全性部分时我一直收到错误。以下是我的步骤:
1)创建一个新的mysql数据库。 2)创建一个新的MVC2应用程序。 3)更改web.config如下:
<connectionStrings>
<remove name="LocalMySqlServer"/>
<add name="LocalMySqlServer"
connectionString="Data Source=127.0.0.1;Port=3306;Database=Sample;User id=root;Password=mysql;"
providerName="MySql.Data.MySqlClient"/>
<remove name="ApplicationServices"/>
<add name="ApplicationServices"
connectionString="Data Source=127.0.0.1;Port=3306;Database=Sample;User id=root;Password=mysql;"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
...
<membership defaultProvider="MySqlMembershipProvider">
<providers>
<clear/>
<add name="MySqlMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider,MySql.Web,Version=6.3.6.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
connectionStringName="MySqlMembershipConnection"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/"
autogenerateschema="true"/>
</providers>
</membership>
<profile>
<providers>
<clear/>
<add type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"
name="MySqlProfileProvider"
applicationName="/"
connectionStringName="MySqlMembershipConnection"
autogenerateschema="true"/>
</providers>
</profile>
<roleManager enabled="true" defaultProvider="MySqlRoleProvider">
<providers>
<clear />
<add connectionStringName="MySqlMembershipConnection"
applicationName="/"
name="MySqlRoleProvider"
type="MySql.Web.Security.MySQLRoleProvider,MySql.Web,Version=6.3.6.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
autogenerateschema="true"/>
</providers>
</roleManager>
<machineKey validationKey="AutoGenerate" validation="SHA1"/>
当我运行WSAT并单击安全性时,我收到此错误:
您选择的数据存储存在问题。这可以 由无效的服务器名称或 凭证,或不足 允许。它也可能是由 角色管理器功能不存在 启用。点击下面的按钮即可 重定向到您可以的页面 选择一个新的数据存储。
以下消息可能对您有所帮助 诊断问题:来源是 找不到,但部分或全部事件日志 无法搜索。创造 来源,你需要阅读权限 所有事件日志,以确保 新的源名称是唯一的。 无法访问的日志:安全性。
有人能告诉我这个程序有什么问题吗?谢谢大家!
答案 0 :(得分:1)
最后我得到了它的工作,我想在这里分享这些信息。我在ASP.NET MVC 2网站中使用最新版本的Connector / Net(6.3.6)。这是我做的:
1)创建一个新的MySql数据库(或者只使用你的数据库)。
2)确保您的machine.config已启用MySQLMembershpProvider的架构自动生成。您可能知道,machine.config通常位于c:\ windows \ microsoft.net \ framework [version] \ config \ machine.config下。在MySQLMembershipProvider的条目下找到并将属性autogenerateschema =“true”附加到元素。整个元素将如下所示:
<add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Clear" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" autogenerateschema="true"/>
3)在你的web.config中(我指的是一个新创建的Web应用程序,如果需要,可以进行更改)更改连接字符串和提供程序,以便它们引用MySql。通常:在connectionStrings下添加:
<remove name="ApplicationServices"/>
<add name="ApplicationServices" connectionString=connectionString="server=YOURSERVER;UserId=YOURUSER;password=YOURPASSWORD;Persist Security Info=True;database=YOURDATABASE;charset=utf8" providerName="MySql.Data.MySqlClient"/>
(顺便说一下,请注意连接字符串中的charset = utf8:这不是成员资格所必需的,但是如果要使用此连接字符串来交换Unicode数据则需要它:仅仅定义字符是不够的在MySql表字段中设置!)。
此外,在成员资格/提供者下...确保成员资格提供程序元素(通常类似于add name =“AspNetSqlMembershipProvider”...)connectionStringName属性是指您在上面设置的连接字符串(在我的情况下,connectionStringName =“ ApplicationServices“)。对profile和roleManager提供程序执行相同操作,它们应如下所示:
<profile>
<providers>
<clear/>
<add type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"
name="AspNetSqlProfileProvider"
applicationName="/"
connectionStringName="ApplicationServices"
autogenerateschema="true"/>
</providers>
</profile>
<roleManager enabled="true" defaultProvider="MySqlRoleProvider">
<providers>
<clear />
<add connectionStringName="ApplicationServices"
applicationName="/"
name="MySqlRoleProvider"
type="MySql.Web.Security.MySQLRoleProvider,MySql.Web,Version=6.3.6.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
autogenerateschema="true"/>
</providers>
</roleManager>
<machineKey validationKey="AutoGenerate" validation="SHA1"/>
(注意SHA1验证!)。
4)从Visual Studio启动WSAT并让它配置你的MySql数据库。它应该创建所需的所有表,并允许您创建用户和分配角色。小心表名称套管!使用像myaspnet_Users(而不是myaspnet_users)这样的WSAT表,这可能会导致混淆(MySQL Workbench似乎对此感到困惑,如果你有2个表,它们的名称只是通过大小写区别而只显示1个表。像Navicat这样的工具在这方面似乎更聪明)。最好让WSAT创建表来避免这种麻烦。
最后,请记住,如果要在某些关系中使用my_aspnet ...表,则必须确保选择正确的MySQL数据库引擎,即不是MyISAM而是InnoDB,否则即使设置了外键也会被忽略
我可以分享这个问题。希望这可能会为其他人节省一些时间......
答案 1 :(得分:0)
也许我找到了罪魁祸首:我今天工作的PC没有自己的machine.config(for .net 4)配置为autogenerateschema =“true”(顺便说一下上面我的代码中有一个拼写错误,连接字符串名称是不正确的,但这只发生在我的帖子中的复制/粘贴)。所以这可能对像我这样的所有新手都很有用:记得设置autogenerateschema =“true”
无论如何,谢谢