我一直在使用Azure移动服务和我的应用程序没有太多问题,但是今天当我尝试从服务中提取时出现此错误:
Exception = System.Data.SqlClient.SqlException(0x80131904):无法打开 登录请求的数据库“master”。登录失败。登录 用户'JVlSvKwDpdLogin_ ***** '失败。
我以前从来没有遇到过这个问题,我只是用这样的代码连接到我的移动服务:
public static MobileServiceClient MobileService = new MobileServiceClient(
"https://<webservicename>.azure-mobile.net/",
"<YOUR-API-KEY-HERE>"
);
在此错误发生之前,我从未提供用户名或密码。我已经看到了一些解决方案,他们为数据库创建了一个用户,但我现在不想创建一个用户,因为我们还在测试中,而现在我宁愿能够使用该服务。这是移动服务的问题,还是数据库的问题?
更新
正如下面Matt的回答所示,我在Azure门户中找到了MS_ConnectionString。然后,我连接到Azure SQL服务器上的“主”数据库,并搜索上面的登录信息。我使用
将密码更改为连接字符串中的密码ALTER LOGIN <login> WITH password='<password-found-in-connection-string>';
但现在我收到了这个错误:
Exception = System.Data.Entity.Core.ProviderIncompatibleException:访问数据库时出错。这通常意味着与数据库的连接失败。检查连接字符串是否正确,以及是否使用了相应的DbContext构造函数来指定它或在应用程序的配置文件中找到它。有关DbContext和连接的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=386386。有关失败的详细信息,请参阅内部异常。 ---&GT; System.Data.Entity.Core.ProviderIncompatibleException:提供程序未返回ProviderManifestToken字符串。 ---&GT; System.Data.SqlClient.SqlException:用户'JVlSvKwDpdLogin_ ******* '登录失败。
我没有使用连接字符串或AzureMobileService项目的web.config文件进行任何更改。
的web.config:
<connectionStrings>
<add name="MS_TableConnectionString" connectionString="Data Source= (localdb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-CoverageTool.AzureMobileService-20140910083006.mdf;Initial Catalog=aspnet-CoverageTool.AzureMobileService-20140910083006;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
MobileContext:
private const string connectionStringName = "Name=MS_TableConnectionString";
public MobileServiceContext()
: base(connectionStringName)
{
}
连接字符串
数据源= ***** .database.windows.net;初始目录= sbpconsulting_db;用户ID = ******* Login_sbpconsulting;密码= *** *********** ;异步处理= True; TrustServerCertificate = False;
答案 0 :(得分:9)
如果您的Entity Framework数据库初始化程序与您的Azure移动服务正在使用的数据库用户的权限不兼容,也可能出现此错误。
例如,在为Azure移动服务创建数据库时,Azure会自动为您的服务创建数据库用户。该用户没有管理员权限 - 它通常可以读取和写入数据到表。在这种情况下,如果您使用DropCreateDatabaseAlways数据库初始化程序,您的用户将没有足够的权限来实际删除数据库,您可能会看到您提到的错误。
引入了新的初始化程序以使用有限的权限集:
答案 1 :(得分:1)
我只能想到一件可能是问题的事情。 Windows Azure数据库仅允许您预先列出白名单的特定IP地址。
因此,如果您尝试从不同的互联网连接运行您的应用程序,或者如果您的IP地址已更改,则可能是您的问题。
尝试直接在Azure管理控制台上访问数据库,并允许您对数据库服务器进行IP地址访问。
Azure始终需要身份验证,因此请检查应用程序app.config / web.config文件以获取凭据。
更多基于代码的信息可能有助于使这个答案不仅仅是在黑暗中拍摄。
答案 2 :(得分:0)
您是否控制SQL登录?您是否在同一SQL Azure服务器上托管了其他数据库? 该错误发生在服务层和数据库之间的后端,并且不会受到客户端应用程序中任何内容的影响。
门户网站中的帐户设置并不具备所需的权限。您发现了一个错误,有人撤销了该用户的权限,或者密码已更改。
根据错误消息,我说这是后一个问题,您需要找出密码是什么,并确保它与移动服务的配置选项卡上的MS_TableConnectionString设置同步。您可能必须在SQL上重置该登录的密码,并且还要更新连接字符串以确保它们是相同的。
答案 3 :(得分:0)
可能存在问题的另一个问题是EF迁移。您是否更改了模型并启用了迁移?这将在您的本地实例上运行良好,您可以添加迁移和更新数据库。当您进行部署时,虽然您希望启用自动迁移以确保SQL Azure DB也应用了迁移。我发现人们在迁移问题时遇到同样的错误消息(ProviderIncompatible)问题。 要启用自动迁移,请确保进入configuration.cs文件并将设置boolean属性的代码行更改为&#34; false&#34;默认情况下为&#34; true&#34;。
答案 4 :(得分:0)
我也遇到过这个问题。 我的移动服务正在连接到我的Azure SQL数据库,名为“Diary&#39;”。几个星期以来,这工作正常。然后,在没有任何改变的情况下,我开始收到错误:
Exception = System.Data.SqlClient.SqlException(0x80131904):无法打开数据库&#34; master&#34;登录请求。登录失败。用户登录失败&#39; HwRkAPcQLyLogin_xxxService&#39;。
我通过以下方式解决了问题:
我使用这个方便的工具来管理Azure用户: https://aumc.codeplex.com/
我没有更改master数据库中的任何内容。