webentwicklung-frage-antwort-db.com.de

Oracle.ManagedDataAccess und ORA-01017: ungültiger Benutzername/Passwort; Anmeldung verweigert

Ich habe eine schwierige Situation auf einem unserer Server. Ich habe eine ASP.NET MVC 3-Anwendung, die eine Verbindung zu einer Oracle 12c-Datenbank herstellen muss. Dabei wird folgende Verbindungszeichenfolge verwendet:

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

Ich verwende auch Oracles Oracle.ManagedDataAccess, Version 4.121.1.0 von Oracle. Jeder Verbindungsversuch führt zu dem folgenden Fehler:

ORA-01017: invalid username/password; logon denied

Ich kann auf meinem Desktop erfolgreich eine Verbindung mit den oben genannten Anmeldeinformationen herstellen. Ich habe denselben Code auf einem anderen Server, aber ich verwende eine ältere, nicht verwaltete Version der Bibliothek, und es kann eine Verbindung mit den oben genannten Anmeldeinformationen hergestellt werden. Der Server, auf dem mein Code ausgeführt werden soll, schlägt jedoch jedes Mal mit den gleichen Anmeldeinformationen fehl, die erfolgreiche Verbindungen auf verschiedenen Servern ermöglichen.

Auf dem Server, der ausfällt, kann ich:

  • verbindung über SQLPLUS
  • die Datenbank mit TNSPING aufrufen
  • Erstellen Sie einen System-DSN, um eine ODBC -Verbindung herzustellen

Ich habe die TNSNAMES.ORA an allen Standorten überprüft und sie scheinen korrekt zu sein.

Nachdem der Account zu oft auf die Datenbank gestoßen war, wurde das Konto tatsächlich gesperrt, was darauf hinweist, dass ich tatsächlich auf die Datenbank schlug und dass die Datenbank die angezeigten Anmeldeinformationen nicht mochte. Ich habe die Anwendungen überprüft, die zuvor erfolgreich verbunden waren, und sie scheiterten ebenfalls mit einem Fehler, der darauf hinweist, dass das Konto gesperrt war. Durch das Entsperren des Kontos wurde eine erfolgreiche Verbindung dieser Anwendungen hergestellt, mit Ausnahme des Servers, mit dem ich Probleme habe.

Ich bin am Ende meines Witzes. 

Hat jemand andere Vorschläge, was dieses Problem verursachen könnte?

EDIT:

Ich habe WireShark auf meinem lokalen Computer und auf dem angreifenden Server installiert. Ich habe die Kommunikation zwischen meinem Desktop und der Datenbank sowie dem angreifenden Server und der Datenbank erfasst. Ich habe festgestellt, dass mein Desktop das Passwort übermittelt hat:

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...

in der Erwägung, dass der Server, mit dem ich Probleme habe, dies nicht tat (oder zumindest ist dies die Annahme):

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   ................

Kennt jemand eine Sicherheits-/Konfigurationseinstellung, die verhindert, dass Kennwörter übertragen werden, obwohl sie in der Verbindungszeichenfolge vorhanden sind?

Bearbeiten (20180713):

In meinem speziellen Fall war das Problem die Einstellung FIPS.

Für Forscher gibt es mehrere Möglichkeiten. 

  1. Sie können die Registrierungseinstellung unter HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled ändern. Wenn FIPS aktiviert ist, ist der Wert 1. Wenn deaktiviert, ist der Wert 0. Sie müssen nicht neu starten.

  2. Der Grund für dieses Problem ist wahrscheinlich, dass FIPS aktiviert ist und Sie die von Oracle verwaltete Datenzugriffsbibliothek verwenden. Eine solide Problemumgehung besteht darin, die nicht verwaltete Bibliothek zu verwenden. Um diese Bibliothek verwenden zu können, müssen Sie jedoch den Oracle Instant Client installieren. Der Client steht unter Oracle Data Access Components zum Download zur Verfügung.

  3. Aktualisieren Sie Ihren Server auf Oracle 12.2c. Oracle 12c-Versionen vor 12.2c haben dieses Problem weiterhin. 

Wenn Sie FIPS nicht aktiviert haben, müssen Sie höchstwahrscheinlich prüfen, ob in Ihrer Datenbank die Einstellung SEC_CASE_SENSITIVE_LOGON auf true gesetzt ist. Sie müssen ALTER SYSTEM SET ausführen. SEC_CASE_SENSITIVE_LOGON = FALSE; und setzen Sie dann alle Ihre Passwörter zurück. 

10
DerHaifisch

Ich habe seit ein paar Wochen mit diesem Thema zu kämpfen und habe endlich eine Lösung. Ich musste die Sicherheitsrichtlinie FIPS deaktivieren. Versuchen Sie, diesen Schlüssel einzustellen:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy] "Enabled" = dword: 00000000

zu null, es hat perfekt für mich funktioniert

Ich habe Ihren Thread verfolgt, und Ihre leere Passwortfrage hat mich schließlich hier gezeigt:

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

11
Jeff McConnell

Basierend auf Jeffs Antwort (31.10.2014) ...

Die Registrierungseinstellung kann durch GPO festgelegt werden, um nur FIPS -konforme Algorithmen zuzulassen. Wenn Sie diesen Wert auf 0 setzen, kann dies gegen einige Sicherheitsrichtlinien verstoßen und wird vom Gruppenrichtlinienobjekt überschrieben. Diese Registrierungseinstellung steuert mehr als nur IIS oder ASP.NET. 

Es gibt eine andere Möglichkeit, die für .NET spezifisch ist und auf Anwendungsebene funktionieren kann. Dies ist viel einfacher zu rechtfertigen, als wenn Sie die Einstellungen des gesamten Servers ändern.

Anwendungsspezifische Methode:

Fügen Sie in Ihrer Datei Web.config oder App.config die folgende Einstellung hinzu:

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

Wenn ich mich recht erinnere, muss dies am Anfang Ihrer Konfigurationsdatei sein.

Alle .NET-Anwendungsmethode:

Fügen Sie die Einstellung oben in die Datei machine.config ein. Für jede .NET-Version und -Architektur gibt es eine (64 Bit/32 Bit). Es wird bereits ein Element geben, also füge das Element hinein.

9
John O'Reilly

Ich hatte das gleiche Problem mit Entity Framework und dem Oracle.ManagedDataAccess.Client, aber ich hatte etwas Erfolg, indem ich mein Kennwort im Abschnitt für die Konfigurationsverbindungszeichenfolge vorrangig behandelte.

2
ameritrash

Ich hatte das gleiche Problem! Ich habe nicht versucht, den RegKey zu ändern, aber ich habe versucht, die Web- und Maschinenkonfiguration zu ändern. Das hat nicht funktioniert. 

Was das Problem gelöst hat, war das Ändern des App-Pools, unter dem ich lief! 

Der App Pool wurde unter einem Dienstkonto ausgeführt. Nachdem ich ihn mit einem Standard-Systemkonto in ein neues App Pool verschoben hatte, begann er mit der Eingabe der Benutzer-ID und des Kennworts aus der Konfiguration. 

0
Robert Stokes

Ich hatte nicht ganz das gleiche Szenario wie dieser Fall, hatte aber sehr ähnliche Ergebnisse. Um das Problem zu lösen, habe ich das Passwort in Anführungszeichen wie das folgende (VB.NET) gesetzt:

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

oder verwenden Sie chr (34) wie folgt

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

Aus irgendeinem Grund (und ich habe keine Ahnung warum) sendet mein C # -Code meinen Benutzernamen in Großbuchstaben, obwohl ich ihn in Kleinbuchstaben schreibe.

Zum Beispiel ist mein Benutzername kullaniciadi. Sie denken vielleicht, dass dies in Großbuchstaben KULLANICIADI ist, aber es scheint nicht so. Das Gebietsschema meines Servers ist türkisch (ich glaube, das ist der Grund), daher wird die großgeschriebene Version meines Benutzernamens zu KULLANİCİADİ weil in türkischen Großbuchstaben von iİ und Großbuchstaben von ı ist I. Und dies führt zu einem ungültigen Benutzernamen.

Hatte keine Kontrolle über die Datenbank und kann daher keine Einstellungen daran ändern.

Durch Eingabe meines Benutzernamens in Großbuchstaben wurde das Problem behoben.

Auch dies funktioniert nur in Kombination mit akzeptierten Antworten. Wenn der in der akzeptierten Antwort erwähnte Registrierungsschlüssel auf 1 gesetzt ist, funktioniert diese Antwort möglicherweise nicht.

Verbrachte viele Stunden für diese dumme Sache. Ich schreibe das auf, damit du es nicht tust.

0
Ergec

Überprüfen Sie die Schreibweise von Benutzername und Passwort.

0

Ich habe versucht mit dem Befehl: 

ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;

Aber es hat nicht funktioniert. Ich musste es mit dem SQL Developer auf der Registerkarte DBA ändern. 

  1. Suchen Sie den Parameter 'sec_case_sensitive_logon' und ändern Sie den Wert in 'FALSE'  enter image description here
  2. Übernehmen Sie Ihre Änderungen mit der Taste:  enter image description here
  3. Es wird die Commit-Strategie abfragen und Sie müssen beide wählen:  enter image description here
  4. Klicken Sie auf "Übernehmen".
  5. Ich weiß nicht, ob dieser Schritt erforderlich ist, aber ich habe auch das Passwort des Benutzers geändert. (Ich setze dasselbe Passwort)

Falls Sie nicht wissen, wie Sie die 'Initialisierungsparameter' öffnen,

  1. Öffnen Sie 'Oracle SQL Developer'.
  2. Gehen Sie zum Menü "Ansicht" und wählen Sie "DBA" aus.
  3. Wählen Sie eine Verbindung
  4. Und dann auf 'Initialisierungsparameter' klicken

 enter image description here

0

Ich hatte genau das gleiche Problem. Als ich direkt von SqlDeveloper aus eine Datenbank aufbaute, funktionierte es einwandfrei. Meine Anwendung (auf der Basis von VB6) konnte jedoch keine Verbindung zu Oracle herstellen und gab den Fehler "ORA-01017 Ungültige ID/Kennwort.
Nach dem Deaktivieren der Groß-/Kleinschreibung bei meiner Datenbank-ID wurde das Problem behoben.

0
rima ganguly