Oracle.ManagedDataAccess y ORA-01017: nombre de usuario / contraseña no válidos; inicio de sesión denegado

Tengo una situación desafiante en uno de nuestros servidores. Tengo una aplicación ASP.NET MVC 3 que necesita conectarse a una base de datos Oracle 12c. Lo hace usando la siguiente cadena de conexión:

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

También estoy usando Oracle.ManagedDataAccess, versión 4.121.1.0 de Oracle. Cada bash de conexión da como resultado el siguiente error:

 ORA-01017: invalid username/password; logon denied 

Me puedo conectar con éxito en mi escritorio con las credenciales anteriores. Tengo el mismo código en otro servidor, pero usando una versión anterior de la biblioteca no administrada, y se puede conectar con éxito con las credenciales antes mencionadas. Sin embargo, el servidor en el que me gustaría que mi código se ejecute falla cada vez que se usan las mismas credenciales que permiten conexiones exitosas en diferentes servidores.

En el servidor que falla, puedo:

  • conectarse a través de SQLPLUS
  • golpear la base de datos con TNSPING
  • Crear un DSN del sistema para establecer una conexión ODBC

Revisé TNSNAMES.ORA en todas las ubicaciones y parecen ser correctos.

Después de presionar la base de datos muchas veces, la cuenta se bloqueó, lo que indica que, de hecho, estaba llegando a la base de datos y que a la base de datos no le gustaban las credenciales presentadas. Revisé las aplicaciones que anteriormente se conectaban correctamente y también fallaron con un error que indicaba que la cuenta estaba bloqueada. Al desbloquear la cuenta, esas aplicaciones se conectaron con éxito, a excepción del servidor con el que tengo problemas.

Estoy en mi ingenio.

¿Alguien tiene alguna otra sugerencia sobre qué podría causar este problema?

EDITAR :

Instalé WireShark en mi computadora local y en el servidor infractor. Capturé la comunicación entre mi escritorio y la base de datos, así como el servidor infractor y la base de datos. Descubrí que mi escritorio comunicó la contraseña:

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

mientras que el servidor con el que estoy teniendo problemas, no lo hizo (o al menos esa es la suposición):

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

¿Alguien sabe de una configuración de seguridad / configuración que evitaría que las contraseñas se transmitan aunque estén presentes en la cadena de conexión?

Editar (20180713):

En mi caso particular, el problema era la configuración de FIPS.

Para quienes investigan, hay varias formas de evitar esto.

  1. Puede modificar la configuración del registro ubicada en HKLM \ System \ CurrentControlSet \ Control \ Lsa \ FIPSAlgorithmPolicy \ Enabled. Si FIPS está habilitado, el valor es 1. Si está deshabilitado, el valor es 0. No necesita reiniciar.

  2. Lo más probable es que el motivo por el que se encuentre con este problema sea que FIPS está habilitado y está utilizando la biblioteca de acceso a datos administrados de Oracle. Una solución sólida es usar la biblioteca no administrada. Sin embargo, para usar esta biblioteca, debe instalar Oracle Instant Client. El cliente está disponible para su descarga en Oracle Data Access Components .

  3. Actualice su servidor a Oracle 12.2c. Las versiones de Oracle 12c anteriores a 12.2c todavía tienen este problema.

Si no tiene habilitado FIPS, lo más probable es que necesite investigar si su base de datos tiene establecida la configuración SEC_CASE_SENSITIVE_LOGON en verdadero. Tendrá que ejecutar ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE; y luego reinicia todas tus contraseñas.

He estado luchando con este mismo problema durante un par de semanas y finalmente tengo una resolución. Tuve que desactivar la política de seguridad FIPS, intente configurar esta clave:

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

a cero, funcionó perfectamente para mí

Estaba siguiendo su hilo, su problema de contraseña en blanco finalmente me señaló aquí:

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

Basado en la respuesta de Jeff (31/10/2014) …

GPO puede configurar la configuración del registro para que solo permita algoritmos compatibles con FIPS. Establecer esto en 0 como se indica puede ser una violación de algunas políticas de seguridad y el GPO puede sobrescribirlo. Esta configuración de registro controla más que solo IIS o ASP.NET.

Hay otra manera que es específica de .NET y puede funcionar a nivel de aplicación. Esto es mucho más fácil de justificar comparado con la modificación de la configuración de todo el servidor.

Método específico de la aplicación:

En su archivo Web.config o App.config, agregue la siguiente configuración:

      ... the rest of your .config 

Si recuerdo correctamente, esto debe estar al principio de su archivo de configuración.

Todo el método de aplicación .NET:

Coloque la configuración anterior en el archivo machine.config. Habrá uno para cada versión .NET y architecture (64 bit / 32 bit). Ya habrá un elemento, así que pon el elemento dentro de él.

Intente utilizar uno de los siguientes como cadena de conexión:

  1. Data Source=username/password@//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;

Puede obtener más información aquí .

No tuve exactamente el mismo escenario que este caso, pero obtuve resultados muy similares. Lo que hice para resolver el problema fue, adjunté la contraseña entre comillas como la siguiente (VB.NET):

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

o use chr (34) de la siguiente manera

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

Tuve exactamente el mismo problema. Cuando me estaba conectando a la base de datos directamente desde SqlDeveloper, funcionaba bien. Pero mi aplicación (basada en VB6) no pudo conectarse a Oracle y dio el error “ORA-01017 ID / contraseña inválida.
Después de desactivar el inicio de sesión sensible a mayúsculas / minúsculas para mi ID de base de datos, resolvió el problema.

¡Yo tuve el mismo problema! No intenté cambiar el RegKey, pero intenté cambiar la configuración web y de la máquina. Esto no funcionó.

¡Lo que solucionó el problema fue cambiar el grupo de aplicaciones con el que me estaba ejecutando!

El Pool de aplicaciones se estaba ejecutando bajo una cuenta de servicio y una vez que lo moví a un nuevo Pool de aplicaciones con solo la cuenta del sistema predeterminada, comenzó a recoger la Identificación de usuario y la Contraseña de la configuración.