数据库和“主”用户的Azure移动服务登录错误

时间:2014-09-16 01:15:53

标签: c# sql-server azure azure-sql-database azure-mobile-services

我一直在使用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;

5 个答案:

答案 0 :(得分:9)

如果您的Entity Framework数据库初始化程序与您的Azure移动服务正在使用的数据库用户的权限不兼容,也可能出现此错误。

例如,在为Azure移动服务创建数据库时,Azure会自动为您的服务创建数据库用户。该用户没有管理员权限 - 它通常可以读取和写入数据到表。在这种情况下,如果您使用DropCreateDatabaseAlways数据库初始化程序,您的用户将没有足够的权限来实际删除数据库,您可能会看到您提到的错误。

引入了新的初始化程序以使用有限的权限集:

  • ClearDatabaseSchemaAlways - 使用而不是DropCreateDatabaseAlways
  • ClearDatabaseSchemaIfModelChanges - 使用而不是DropCreateDatabaseIfModelChanges

答案 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;。

我通过以下方式解决了问题:

  • 添加用户&#39; HwRkAPcQLyLogin_xxxService&#39;到我的日记&#39;数据库
  • 将db_owner权限分配给&#39; HwRkAPcQLyLogin_xxxService&#39;用户

我使用这个方便的工具来管理Azure用户: https://aumc.codeplex.com/

我没有更改master数据库中的任何内容。