6

Używam Azure Services Telefony z moich aplikacji bez większego problemu, ale dzisiaj, kiedy starałem się wyciągnąć z usługi otrzymuję ten błąd:błąd logowania Azure służba ruchoma z bazy danych i „master” użytkownik

Exception=System.Data.SqlClient.SqlException (0x80131904): Cannot open database "master" requested by the login. The login failed. Login failed for user 'JVlSvKwDpdLogin_*****'.

nigdy nie miałem ten problem wymyślić wcześniej, a ja jedynie podłączenia do mojego telefonu usługi w kodzie tak:

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

zanim ten błąd się stało, nigdy nie dostarczył nazwy użytkownika lub hasła. Widziałem kilka rozwiązań, w których utworzyli użytkownika dla bazy danych, ale nie chcę go tworzyć już teraz, ponieważ wciąż jesteśmy w fazie testowania i wolałbym teraz móc korzystać z tej usługi bez niej. Czy jest to problem związany z usługą mobilną lub problem z bazą danych?

UPDATE

Jak sugeruje odpowiedź Matta poniżej, znalazłem MS_ConnectionString w Azure portalu. Następnie podłączyłem się do bazy danych "master" na moim serwerze Azure SQL i szukałem powyższego loginu. Zmieniłem hasło do tego znalezionego w ciągu połączenia przy użyciu

ALTER LOGIN <login> WITH password='<password-found-in-connection-string>'; 

Ale teraz mam ten błąd:

Exception=System.Data.Entity.Core.ProviderIncompatibleException: An error occurred accessing the database. This usually means that the connection to the database failed. Check that the connection string is correct and that the appropriate DbContext constructor is being used to specify it or find it in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=386386 for information on DbContext and connections. See the inner exception for details of the failure. ---> System.Data.Entity.Core.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string. ---> System.Data.SqlClient.SqlException: Login failed for user 'JVlSvKwDpdLogin_*******'.

I nie zmienia niczego w ciągu połączenia lub pliku web.config dla mojego projektu AzureMobileService.

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) 
    { 
    } 

String Connection

Data Source=*****.database.windows.net;Initial Catalog=sbpconsulting_db;User ID=*******Login_sbpconsulting;Password=**************;Asynchronous Processing=True;TrustServerCertificate=False;

+0

Czy możesz wkleić ciąg połączenia (minus nazwa użytkownika i hasło), który znajdziesz w portalu? –

+0

Pewnie, właśnie dodałem ciąg połączenia. W celu ponownego wpisania, jest to ciąg połączenia, który został automatycznie utworzony wraz z usługą mobilną, więc nie wprowadziłam żadnych zmian. Jedyne, co zrobiłem, to skopiowanie i wklejenie hasła podczas próby ZMIENIA SIĘ LOGIN ze skryptu bazy danych, ale nadal pojawiają się błędy logowania. – WiteCastle

Odpowiedz

1

mogę myśleć tylko o jednej rzeczy, że może być problem. Baza danych systemu Windows Azure zezwala tylko na określone adresy IP, które podałeś białą ręką.

Jeśli więc próbujesz uruchomić aplikację z innego połączenia internetowego lub Twój adres IP się zmienił, może to być problem.

Spróbuj uzyskać dostęp do bazy danych bezpośrednio w Konsoli zarządzania Azure i zezwól na dostęp do adresu IP serwerowi bazy danych.

System Azure zawsze wymaga uwierzytelnienia, dlatego sprawdź, czy w pliku poświadczeń znajdują się pliki aplikacji app.config/web.config.

Więcej informacji na temat kodu byłoby pomocne, aby ta odpowiedź była czymś więcej niż ujęciem w ciemności.

+0

Mogę uzyskać dostęp do portalu zarządzania i sprawdziłem adresy IP. Przepraszamy za brak kodu, ale daj znać, co chcesz/potrzebujesz zobaczyć. To jedyne miejsce w mojej aplikacji klienckiej (Windows Phone 8.1 aplikacja) Zrobiłem połączenie z usługą mobilną w App.xaml.cs pokazanym w powyższym kodzie. Czy mówiłeś o web.config projektu mobilnego? – WiteCastle

+0

Tak, miałem na myśli plik web.config. Proszę umieścić znacznik pliku w górze, czasami poświadczenia są tam osadzone w przykładowych aplikacjach. –

0

Czy kontrolujesz logowanie SQL? Czy masz inne bazy danych hostowane na tym samym serwerze SQL Azure? Ten błąd występuje w zapleczu między warstwą usługi a bazą danych i nic nie będzie miało wpływu na aplikacje klienckie.

Konfiguracja konta w portalu nie ma wymaganych uprawnień. Albo znalazłeś błąd, ktoś odwołał uprawnienia dla tego użytkownika, albo zmieniło się hasło.

W oparciu o komunikat o błędzie, powiedziałbym, że jest to drugi problem i musisz dowiedzieć się, jakie jest hasło i upewnić się, że jest ono zsynchronizowane z ustawieniem MS_TableConnectionString na karcie Konfiguruj usługi mobilnej. Konieczne może być zresetowanie hasła do tego logowania w SQL, a także zaktualizować ciąg połączenia, aby upewnić się, że są takie same.

+0

Znalazłem ciąg połączenia i hasło, którego używa dla powyższego użytkownika. Uruchomiłem zapytanie "ALTER LOGIN WITH password = '';" użycie hasła w ciągu połączenia. Ale wciąż nie ma szczęścia. Czy jest jakiś krok, którego mi brakuje? – WiteCastle

+0

Czy możesz sprawdzić moją aktualizację na pytanie? – WiteCastle

0

Kolejną rzeczą, która może być problemem, są migracje EF. Czy zmieniłeś model i włączone migracje? Wszystko to działałoby poprawnie na twojej lokalnej instancji i możesz dodać migracje i aktualizować bazę danych. Po uruchomieniu należy włączyć automatyczne migracje, aby upewnić się, że baza danych SQL Azure DB również zostanie poddana migracji. Widziałem, że ludzie mają problemy z tym samym komunikatem o błędzie (ProviderIncompatible), gdy był to problem związany z migracjami. Aby włączyć automatyczne migracje, należy przejść do pliku configuration.cs i zmienić wiersz kodu, który ustawia właściwość boolean na "false" domyślnie na "true".

+0

Nie włączono jeszcze migracji, ponieważ wciąż jesteśmy w fazie rozwoju, więc w razie potrzeby nukuję bazę danych. Ale najpierw spróbuję i zobaczę, czy to naprawi. Zauważyłem także, że baza danych zmieniła się z bezpłatnej "internetowej" edycji na "podstawową" edycję w poniedziałek, kiedy ten problem się zaczął. Zastanawiam się, czy to spowodowało. – WiteCastle

9

Ten błąd może się również pojawić, jeśli inicjatory bazy danych Entity Framework nie są zgodne z uprawnieniami użytkownika bazy danych używanego przez usługę Azure Mobile.

Na przykład po utworzeniu bazy danych dla usługi Azure Mobile usługa Azure automatycznie tworzy użytkownika bazy danych dla usługi. Ten użytkownik nie ma uprawnień administratora - może ogólnie czytać i zapisywać dane w tabeli. W takim przypadku, jeśli używasz inicjalizatora bazy danych DropCreateDatabaseAlways, twój użytkownik nie będzie miał wystarczających uprawnień do faktycznego upuszczenia bazy danych i może pojawić się błąd, o którym wspomniałeś.

Są nowe inicjalizatory, które zostały wprowadzone do współpracy z ograniczonego zestawu uprawnienia:

  • ClearDatabaseSchemaAlways - użyj zamiast DropCreateDatabaseAlways
  • ClearDatabaseSchemaIfModelChanges - użyj zamiast DropCreateDatabaseIfModelChanges
+0

Wystąpiły problemy z uruchomieniem usługi Azure Mobile Service, w której posiadałem bazę danych z dwoma schematami, ponieważ inna usługa Azure Mobile korzystała również z tej samej bazy danych (każda usługa automatycznie otrzymuje własny schemat). Tak więc, za pomocą ClearDatabaseSchemaAlways (lub ClearDatabaseSchemaIfModelChanges ) zamiast zwykłego DropCreateDataBaseAlways jest to, co naprawiono dla mnie! Dzięki! – NovaJoe

0

miałem to również kwestia. Moja usługa mobilna łączyła się z moją bazą danych Azure SQL o nazwie "Pamiętnik". To działało dobrze przez kilka tygodni. Potem, bez żadnych zmian z mojej strony, zacząłem coraz błąd:

Exception=System.Data.SqlClient.SqlException (0x80131904): Cannot open database "master" requested by the login. The login failed. Login failed for user 'HwRkAPcQLyLogin_xxxService'.

Naprawiłem problem przez:

  • dodanie użytkownika HwRkAPcQLyLogin_xxxService "do mojej bazy danych„Diary”
  • przypisującej uprawnienia db_owner do user 'HwRkAPcQLyLogin_xxxService'

Kiedyś to poręczne narzędzie do zarządzania lazur Użytkownicy: https://aumc.codeplex.com/

Nie musiałem niczego zmieniać w bazie danych master.

Powiązane problemy