2014-10-16 47 views
8

Mam trudną sytuację na jednym z naszych serwerów. Mam aplikację ASP.NET MVC 3, która musi połączyć się z bazą danych Oracle 12c. Czyni to za pomocą następującego ciągu połączenia:Oracle.ManagedDataAccess i ORA-01017: nieprawidłowa nazwa użytkownika/hasło; Odmowa logowania

User ID=myuserid;Password=mypass;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<IP ADDRESS>)(PORT = 1521)))(CONNECT_DATA=(SERVICE_NAME=PDB1))); 

Używam również Oracle Oracle.ManagedDataAccess, wersja 4.121.1.0. Każda próba połączenia powoduje następujący błąd:

ORA-01017: invalid username/password; logon denied 

Mogę połączyć się pomyślnie na moim komputerze z powyższymi poświadczeniami. Mam ten sam kod na innym serwerze, ale przy użyciu starszej, niezarządzanej wersji biblioteki i mogę połączyć się pomyślnie z wyżej wymienionymi poświadczeniami. Jednak serwer, na którym chciałbym uruchomić mój kod, nie powiedzie się za każdym razem przy użyciu tych samych poświadczeń, które umożliwiają pomyślne połączenia na różnych serwerach.

Na serwerze, która nie mogę:

  • połączyć poprzez SQLPLUS
  • hit bazy danych z tnsping
  • stworzyć system DSN ustanowić połączenie ODBC

mam sprawdził TNSNAMES.ORA we wszystkich lokalizacjach i wydaje się, że są poprawne.

Po naciśnięciu zbyt wiele razy bazy danych konto zostało zablokowane, co oznacza, że ​​faktycznie trafiłem do bazy danych i że baza danych nie podobała się przedstawionym danym. Sprawdziłem aplikacje, które zostały pomyślnie połączone, a także nie udało się z błędem wskazującym, że konto zostało zablokowane. Odblokowanie konta spowodowało pomyślne nawiązanie połączenia przez te aplikacje z wyjątkiem serwera, z którym mam problemy.

Jestem na końcu mojego dowcipu.

Czy ktoś ma jakieś inne sugestie, co może powodować ten problem?

EDIT:

zainstalowałem WireShark na moim komputerze lokalnym i na serwerze naruszającego. Przechwyciłem komunikację między moim komputerem a bazą danych, a także nieprawidłowym serwerem i bazą danych. Okazało się, że mój pulpit przekazane hasło:

0080 35 42 31 41 43 34 30 00 01 01 01 0d 0d 41 55 54 5B1AC40......AUT 
0090 48 5f 50 41 53 53 57 4f 52 44 01 40 40 43 30 36 [email protected]@C06 
00a0 37 39 42 31 31 42 46 36 42 41 43 44 39 30 38 44 79B11BF6BACD908D 
00b0 37 39 34 34 31 31 46 34 32 33 30 42 34 36 44 36 794411F4230B46D6 
00c0 35 36 36 33 31 42 45 39 39 41 36 43 36 37 42 44 56631BE99A6C67BD 
00d0 43 33 35 42 42 44 36 44 42 45 37 34 36 00 01 0d C35BBD6DBE746... 

natomiast z serwerem, z którym mam problemy, nie zrobił (lub przynajmniej, że to założenie):

0080 39 33 39 37 32 33 46 00 01 01 01 0d 0d 41 55 54 939723F......AUT 
0090 48 5f 50 41 53 53 57 4f 52 44 01 40 40 00 00 00 [email protected]@... 
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
00b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
00d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 0d ................ 

Czy ktoś wie o bezpieczeństwo/konfiguracja, która uniemożliwiłaby przesyłanie haseł, nawet jeśli są one obecne w łańcuchu połączenia?

+0

Strzał w ciemności być może: doceniam, że nie chcesz dzielić się z nami nazwą użytkownika i hasłem, ale czy możliwe byłoby przynajmniej udostępnienie nam jakichś nie alfanumerycznych znaków, których używają, jeśli w ogóle? –

+1

Wszystkie są standardowymi znakami alfabetu (d, g, c, m, n, e). Wszystkie są małymi literami. Bez cyfr. Wydaje mi się, że możesz mieć na myśli problemy z zalogowaniem się do oracle, gdzie nazwa użytkownika i/lub hasło mają specjalne znaki, takie jak znak "e" ze znakiem diakrytycznym. W tym momencie posiadanie czegoś prostego byłoby posłaniem Boga. :-) – DerHaifisch

+0

Właściwie, myślałem więcej o symbolach, takich jak ':' lub '?'. Jeśli Twoja nazwa użytkownika i hasło zawierają tylko małe litery, wszystko, co mogę zrobić, to życzyć ci szczęścia. Przepraszam! –

Odpowiedz

11

mam zmaga się z tym samym numerze na kilka tygodni i wreszcie mieć rozdzielczość. Musiałem wyłączyć polityki bezpieczeństwa FIPS, spróbuj ustawienie tego klucza:

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ LSA \ FipsAlgorithmPolicy] "Włączone" = dword: 00000000

do zera, to działało idealnie dla mi

ja po swoim wątku pustym hasłem problem ostatecznie wskazał mi tutaj:

https://community.oracle.com/thread/2557592?start=30&tstart=0

+0

Dzięki! Zdecydowanie się spróbuj! – DerHaifisch

+0

Idealne dla mnie. Stukrotne dzięki!!! – DerHaifisch

+0

Zrobiłem to samo i napisałem własne pytanie, nie wiedząc, czy widziałem to samo - http://dba.stackexchange.com/questions/142085/ora-01017-invalid-username-password-denied - Okazuje się, że miałem ten sam problem i tak sugerowano, żebym naprawił moje. Pracował! Łącząc to pytanie z moim, na wypadek, gdyby inni przeszli przez inną procedurę rozwiązywania problemów, aby dojść do tego, gdzie byłem. – vapcguy

0

Spróbuj użyć jednego z następujących jako ciąg połączenia:

  1. Data Source=username/[email protected]//myserver:1521/my.service.com;

  2. Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID))); User Id=myUsername;Password=myPassword;

Można uzyskać więcej informacji here.

+0

Tak naprawdę przyjrzałem się na tej stronie; w szczególności na stronie https://www.connectionstrings.com/oracle-data-provider-for-net-odp-net/ i wypróbowano każdy ciąg połączenia, ale wciąż nie udało się. Dziwne jest to, że mogę sprawdzić dzienniki odbiornika i zobaczyć połączenia, ale za każdym razem odmawia się dostępu, mimo że nazwa użytkownika i hasło są poprawne. – DerHaifisch

+0

@DerHaifisch Czy używasz identyfikatora procesu do zalogowania się do bazy danych? – Rex

+0

Nie jestem pewien, co masz na myśli. Możesz wyjaśnić? – DerHaifisch

9

oparciu o odpowiedź Jeffa (10/31/2014) ...

Ustawienia rejestru można ustawić za pomocą GPO, aby akceptować tylko algorytmy zgodne z FIPS. Ustawienie tego na 0, może oznaczać naruszenie niektórych zasad bezpieczeństwa i zostanie nadpisane przez obiekt GPO. To ustawienie rejestru kontroluje więcej niż tylko IIS lub ASP.NET.

Jest też inny sposób, który jest specyficzny dla .NET i może pracować na poziomie aplikacji. Jest to znacznie łatwiejsze do uzasadnienia niż modyfikowanie ustawień całego serwera. Metoda specyficzna

Zastosowanie:

W Twojej web.config lub pliku app.config, należy dodać następujące ustawienia:

<configuration> <!-- Will already be there --> 
    <runtime> 
    <enforceFIPSPolicy enabled="false"/> 
    </runtime> 
... the rest of your .config 

Jeśli dobrze pamiętam, to musi być na początku pliku konfiguracyjnego .

Wszystkie metody aplikacji .NET:

Umieścić ustawienie powyżej w pliku Machine.config. Będzie jedna dla każdej wersji .NET i architektury (64 bit/32 bity). Już będzie element, więc umieść w nim element.

+0

Najważniejszą rzeczą w tym momencie jest zidentyfikowanie problemu. Uderzyłeś paznokciem w głowę o bezpieczeństwo, dlatego tak naprawdę nie chcę używać ustawienia rejestru. Naprawdę nie chcę używać elementu enforceFIPSPolicy do pliku web.config, ponieważ wciąż wykonujesz zadanie końcowe związane z wymogami bezpieczeństwa; tylko na podstawie wniosku. Dzięki za podpowiedź o umieszczeniu go na początku pliku konfiguracyjnego. Może się przydać w przyszłości. – DerHaifisch

0

nie bardzo mają ten sam scenariusz, jak w tym przypadku robi, ale ja miałem bardzo podobne wyniki. Co zrobiłem, aby rozwiązać problem, ja załączeniu hasło w cudzysłowy jak poniżej (VB.NET):

cnx.ConnectionString = "User ID=MYID;Password=""MyPass"" ;Data Source=MyTEST"

lub użyj Chr (34) w następujący sposób

cnx.ConnectionString = "User ID=MYID;Password="+chr(34)+"MyPass"+chr(34)+" ;Data Source=MyTEST" 
0

I miał dokładnie ten sam problem. Kiedy łączyłem się z bazą danych bezpośrednio z SqlDeveloper, działało dobrze. Ale moja aplikacja (zbudowana na VB6) nie połączyła się z Oracle i podała błąd "ORA-01017 Nieprawidłowy identyfikator/hasło."
Po wyłączeniu logowania z uwzględnieniem wielkości liter do mojego identyfikatora bazy danych, problem został rozwiązany.