我正在尝试运行默认的“欢迎使用ASP.NET MVC!” Azure上的MVC3应用程序,通过ASP.NET Universal Providers使用SQL Azure作为ASP.NET成员资格存储。我有一个名为“MyDatabase”的SQL Azure数据库,其中包含一个名为“MyUser”的新登录名和用户。用户与登录绑定,并且已获得MyDatabase的dbo_owner角色。 MyDatabase被设置为管理门户中Web角色的链接资源。
该站点在Azure上显示正常,但尝试任何数据库操作,我的数据库连接失败:
无法打开登录请求的数据库“master”。登录失败。用户'MyUser'登录失败。
搜索答案时,通常的响应是在连接字符串中设置“Database”参数。我确实做到了这一点,但它仍在继续尝试“掌握”。它就像被忽略了一样:
Server=tcp:myserver.database.windows.net,1433;Database=MyDatabase;User ID=MyUser@myserver;Password=mypassword;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True
我排除了其他事情:
这里可能有一些新手的错误 - 我还应该检查一下?
答案 0 :(得分:4)
查看异常的堆栈跟踪有助于解决这个问题:
... System.Data.SqlClient.SqlProviderServices.UsingMasterConnection(...)at System.Data.SqlClient.SqlProviderServices.DbDatabaseExists(...)at System.Data.Objects.ObjectContext.DatabaseExists()at System System.Web.Providers.DefaultMembershipProvider.Membership_CreateUser(...)的System.Web.Providers.ModelHelper.CreateMembershipEntities(ConnectionStringSettings设置)中的.Web.Providers.Entities.DatabaseCreationHelper.DatabaseExists(...)...
由于我使用的是新数据库,ASP.NET Universal Providers正在尝试创建成员资格/角色表,并且出于某种原因确实需要使用master数据库来完成此任务。我添加了一个新用户来掌握,绑定到我的登录,并确保它具有“dbmanager”角色,以便它可以在需要时创建表。
我不是百分之百确定它为什么需要通过master,但堆栈跟踪使它看起来像是这样做来检查你给它的数据库是否确实存在。 (如果你知道明确的答案,请继续评论!)