J'ai une situation difficile sur l'un de nos serveurs. J'ai une application ASP.NET MVC 3 qui doit se connecter à une base de données Oracle 12c. Pour ce faire, il utilise la chaîne de connexion suivante:
User ID=myuserid;Password=mypass;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=<IP ADDRESS>)(PORT = 1521)))(CONNECT_DATA=(SERVICE_NAME=PDB1)));
J'utilise également Oracle.ManagedDataAccess, version 4.121.1.0 d'Oracle. Chaque tentative de connexion entraîne l'erreur suivante:
ORA-01017: invalid username/password; logon denied
Je peux me connecter avec succès sur mon bureau avec les informations d'identification ci-dessus. J'ai le même code sur un autre serveur, mais j'utilise une version plus ancienne et non gérée de la bibliothèque et cette dernière peut se connecter avec succès avec les informations d'identification susmentionnées. Toutefois, le serveur sur lequel je souhaite exécuter mon code échoue à chaque fois en utilisant les mêmes informations d'identification qui permettent des connexions réussies sur des serveurs différents.
Sur le serveur en panne, je peux:
J'ai vérifié le TNSNAMES.ORA dans tous les emplacements et ils semblent être corrects.
Après avoir tapé trop souvent dans la base de données, le compte a effectivement été verrouillé, indiquant que je touchais effectivement la base de données et que celle-ci n'aimait pas les informations d'identification présentées. J'ai vérifié les applications qui se connectaient précédemment avec succès et elles ont également échoué avec une erreur indiquant que le compte était verrouillé. Le déverrouillage du compte a permis à ces applications de se connecter avec succès, à l'exception du serveur avec lequel j'ai des problèmes.
Je suis au bout de mon esprit.
Quelqu'un a-t-il d'autres suggestions quant à ce qui pourrait causer ce problème?
EDIT:
J'ai installé WireShark sur mon ordinateur local et sur le serveur incriminé. J'ai capturé la communication entre mon bureau et la base de données, ainsi que le serveur incriminé et la base de données. J'ai trouvé que mon bureau communiquait le mot de passe:
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...
alors que le serveur avec lequel j'ai des problèmes, n'a pas (ou du moins c'est l'hypothèse):
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 ................
Est-ce que quelqu'un connaît un paramètre de sécurité/configuration qui empêcherait la transmission des mots de passe, même s'ils sont présents dans la chaîne de connexion?
Edit (20180713):
Dans mon cas particulier, le problème était le paramètre FIPS.
Pour ceux qui font de la recherche, il y a plusieurs façons de contourner ce problème.
Vous pouvez modifier le paramètre de registre situé dans HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled. Si FIPS est activé, la valeur est 1. Si elle est désactivée, la valeur est 0. Vous n'avez pas besoin de redémarrer.
Ce problème est probablement dû au fait que FIPS est activé et que vous utilisez la bibliothèque d'accès aux données gérées par Oracle. Une solution de contournement consiste à utiliser la bibliothèque non gérée. Cependant, pour utiliser cette bibliothèque, vous devez installer Oracle Instant Client. Le client est disponible au téléchargement dans Oracle Data Access Components .
Mettez à niveau votre serveur vers Oracle 12.2c. Les versions Oracle 12c antérieures à 12.2c ont toujours ce problème.
Si vous n'avez pas activé FIPS, vous devrez probablement vérifier si le paramètre SEC_CASE_SENSITIVE_LOGON de votre base de données est défini sur true. Vous devrez exécuter ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE; puis réinitialisez tous vos mots de passe.
Je me bats avec le même problème depuis quelques semaines et j'ai enfin une résolution. J'ai dû désactiver la politique de sécurité FIPS, essayez de définir cette clé:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Stratégie de FipsAlgorithm] "Enabled" = dword: 00000000
à zéro, cela a parfaitement fonctionné pour moi
Je suivais votre discussion votre problème de mot de passe vide m'a finalement indiqué ici:
https://community.Oracle.com/thread/2557592?start=30&tstart=0
Basé sur la réponse de Jeff (31/10/2014) ...
Le paramètre de registre peut être défini par GPO pour autoriser uniquement les algorithmes conformes à FIPS. Définir ce paramètre sur 0 comme indiqué peut constituer une violation de certaines stratégies de sécurité et être écrasé par l'objet de stratégie de groupe. Ce paramètre de registre contrôle plus que IIS ou ASP.NET.
Il existe un autre moyen spécifique à .NET qui peut fonctionner au niveau de l’application. Cela est beaucoup plus facile à justifier que de modifier les paramètres de l’ensemble du serveur.
Méthode spécifique à l'application:
Dans votre fichier Web.config ou App.config, ajoutez le paramètre suivant:
<configuration> <!-- Will already be there -->
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>
... the rest of your .config
Si je me souviens bien, cela doit être au début de votre fichier de configuration.
Toutes les méthodes d'application .NET:
Placez le paramètre ci-dessus dans le fichier machine.config. Il y en aura un pour chaque version et architecture .NET (64 bits/32 bits). Il y aura déjà un élément, alors placez-le à l'intérieur.
J'avais le même problème avec Entity Framework et Oracle.ManagedDataAccess.Client, mais j'ai eu un certain succès en mettant mon mot de passe en majuscule dans la section Chaîne de connexion de configuration.
J'ai eu le même problème! Je n'ai pas essayé de changer la clé RegKey, mais j'ai essayé de changer la configuration Web et la configuration de la machine. Cela n'a pas fonctionné.
Ce qui a résolu le problème, c’était de changer le pool d’applications sous lequel j’exécutais!
Le pool d'applications fonctionnait sous un compte de service et une fois que je l'ai déplacé vers un nouveau pool d'applications avec uniquement le compte système par défaut, il a commencé à récupérer l'ID utilisateur et le mot de passe dans la configuration.
Je n'avais pas tout à fait le même scénario que dans cette affaire, mais j'ai eu des résultats très similaires. Pour résoudre le problème, j’ai mis le mot de passe entre guillemets comme suit (VB.NET):
cnx.ConnectionString = "User ID=MYID;Password=""MyPass"" ;Data Source=MyTEST"
ou utilisez chr (34) comme suit
cnx.ConnectionString = "User ID=MYID;Password="+chr(34)+"MyPass"+chr(34)+" ;Data Source=MyTEST"
J'essayais avec la commande:
ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
Mais ça n'a pas marché. J'ai dû le changer en utilisant le développeur SQL dans l'onglet DBA.
Au cas où, vous ne savez pas comment ouvrir les "paramètres d'initialisation":
J'ai eu exactement le même problème. Lorsque je me connectais à la base de données directement à partir de SqlDeveloper, cela fonctionnait bien. Mais mon application (construite sur VB6) n'a pas réussi à se connecter à Oracle et à donner l'erreur "ORA-01017 ID/mot de passe invalide.
Après avoir désactivé la connexion sensible à la casse pour mon ID de base de données, le problème a été résolu.