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

Wit*_*tle 6 c# sql-server azure azure-mobile-services azure-sql-database

我一直在使用我的应用程序使用Azure移动服务没有太多问题,但是今天当我尝试从服务中提取时出现此错误:

Exception = System.Data.SqlClient.SqlException(0x80131904):无法打开登录请求的数据库"master".登录失败.用户'JVlSvKwDpdLogin_ ***** ' 登录失败.

我以前从来没有遇到过这个问题,我只是用这样的代码连接到我的移动服务:

public static MobileServiceClient MobileService = new MobileServiceClient(
        "https://<webservicename>.azure-mobile.net/",
        "<YOUR-API-KEY-HERE>"
    );
Run Code Online (Sandbox Code Playgroud)

在发生此错误之前,我从未提供用户名或密码.我已经看到了一些解决方案,他们为数据库创建了一个用户,但我现在不想创建一个用户,因为我们还在测试中,而现在我宁愿能够使用该服务.这是移动服务的问题,还是数据库的问题?

UPDATE

正如下面Matt的回答所示,我在Azure门户中找到了MS_ConnectionString.然后,我连接到Azure SQL服务器上的"主"数据库,并搜索上面的登录信息.我将密码更改为使用连接字符串中找到的密码

ALTER LOGIN <login> WITH password='<password-found-in-connection-string>';
Run Code Online (Sandbox Code Playgroud)

但是现在我收到了这个错误:

Exception = System.Data.Entity.Core.ProviderIncompatibleException:访问数据库时出错.这通常意味着与数据库的连接失败.检查连接字符串是否正确,以及是否使用了相应的DbContext构造函数来指定它或在应用程序的配置文件中找到它.有关DbContext和连接的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=386386.有关失败的详细信息,请参阅内部异常.---> System.Data.Entity.Core.ProviderIncompatibleException:提供程序未返回ProviderManifestToken字符串.---> 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>
Run Code Online (Sandbox Code Playgroud)

MobileContext:

private const string connectionStringName = "Name=MS_TableConnectionString";

    public MobileServiceContext()
        : base(connectionStringName)
    {
    }
Run Code Online (Sandbox Code Playgroud)

连接字符串

数据源= ***** .database.windows.net;初始目录= sbpconsulting_db;用户ID = *******Login_sbpconsulting;密码=************** ;异步加工= TRUE; TrustServerCertificate = FALSE;

Mil*_*kov 9

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

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

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

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


小智 1

我只能想到一件事可能是问题所在。Windows Azure 数据库仅允许您事先已列入白名单的特定 IP 地址。

因此,如果您尝试从不同的互联网连接运行您的应用程序,或者您的 IP 地址已更改,那么这可能是您的问题。

尝试直接在 Azure 管理控制台上访问数据库,并允许您的 IP 地址访问数据库服务器。

Azure 始终需要身份验证,因此请检查应用程序的 app.config / web.config 文件中的凭据。

更多基于代码的信息将有助于使这个答案不仅仅是盲目猜测。