27 votes

Comment éviter de stocker des informations d'identification pour se connecter à Oracle avec JDBC?

Est-il possible de configurer une connexion JDBC pour Oracle sans fournir de nom d'utilisateur/mot de passe de l'information dans un fichier de configuration (ou dans tout autre standard lisible par emplacement)?

Généralement, les applications ont un fichier de configuration qui contient les paramètres de configuration pour se connecter à une base de données. Certains Administrateurs de bases de données ont des problèmes avec le fait que les noms d'utilisateur et mots de passe sont en clair dans les fichiers de configuration.

Je ne pense pas que ce soit possible avec Oracle et JDBC, mais j'ai besoin d'une confirmation...

Un compromis possible est de crypter le mot de passe dans le fichier de configuration et le décrypter avant de configurer la connexion. Bien sûr, la clé de déchiffrement ne devrait pas être dans le même fichier de configuration. Ce sera seulement de résoudre l'ouverture accidentelle du fichier de config par des utilisateurs non autorisés.

6voto

stili Points 598

Vous pouvez essayer de Kerberos qui peut utiliser le système d'exploitation de l'utilisateur des informations d'identification et l'ajout de l'utilisateur de l'OS à la base de données tel qu'identifié à l'extérieur. Assurez-vous que vous utilisez Kerberos et pas la vieille façon de faire de ce, qui a de graves problèmes de sécurité.

Pour la prise en charge de Kerberos, vous aurait besoin de l'option sécurité avancée et un récent pilote JDBC, probablement 11g version. Avant d'essayer de le faire fonctionner en Java, essayer dans Sql*Plus de l'utilisation de '/' comme nom d'utilisateur et mot de passe vide. "select user from dual" devrait vous donner utilisateur@domaine. Vous pouvez également trouver qu'il existe une différence fondamentale entre l'utilisation de minces ou BEC pilote quand il s'agit de configuration Kerberos.

5voto

David G Points 3588

Vous ne voulez certainement pas être capable de se connecter à la base de données, sans informations d'identification, parce que la base de données vulnérables.

C'est un problème général, comment dois-je stocker les informations d'identification nécessaires à l'accès à des systèmes externes? WebLogic a un titre de mapper pour résoudre ce problème, dans lequel les informations d'identification (crypté) sont stockés dans incorporé LDAP. De nombreux produits Oracle utiliser des informations d'identification de stockage qui stocke les informations d'identification dans Oracle porte-monnaie.

Dans la question, vous avez fourni la réponse. Stocker le mot de passe crypté et déchiffrer quand vous en avez besoin. Évidemment, vous devez utiliser l'algorithme de chiffrement symétrique comme 3DES de sorte que vous pouvez décrypter. Assurez-vous que la clé symétrique n'est pas quelque chose qui peut être deviné.

Le truc, c'est l'endroit où vous gardez la clé symétrique nécessaires pour en/de-cryption. Vous pouvez le mettre dans un fichier qui est sécurisé via le système d'exploitation, ou vous pouvez les garder dans le code, mais vous avez besoin de garder le code sécurisé. Vous pouvez également générer la clé si vous utilisez une technique qui va produire la même clé et l'algorithme est raisonnablement sûr.

Si vous pouvez garder le code de sécurité vous pouvez bien évidemment de garder le mot de passe dans le code. Cependant, vous voulez la flexibilité de pouvoir modifier les informations d'identification sans changer le code.

Vous pouvez ajouter plus de couches à cette solution. Vous pouvez crypter le fichier de configuration (avec une clé différente) ainsi que le mot de passe à l'intérieur en faisant le hacker découvrir 2 clés. Il y a d'autres encore plus sûre des méthodes utilisant l'ICP, mais ils obtiennent dur à mettre en place.

3voto

Mike McAllister Points 871

Je vous suggère de regarder dans l'authentification du proxy. Ceci est documenté dans la Base de données Oracle® Guide de la Sécurité, ainsi que la Base de données Oracle® JDBC Guide du Développeur et de Référence. Essentiellement ce que cela vous permet de disposer d'un utilisateur dans la base de données qui ne dispose que de se connecter à des privilèges. Les utilisateurs réels de la base de données des comptes sont configurés pour être en mesure de se connecter en tant qu'utilisateur du proxy. Votre application qui se connecte via JDBC puis stocke le proxy nom d'utilisateur et le mot de passe, et lors de la connexion fournit ces informations d'identification, en PLUS du nom d'utilisateur de la base de données réelle de l'utilisateur dans la chaîne de connexion. Oracle se connecte en tant qu'utilisateur du proxy, puis imite le réel de la base de données de l'utilisateur, hériter de la base de données des privilèges de l'utilisateur réel.

2voto

Achille Points 321

Tous les conteneurs J2EE (JBOSS, Tomcat, BEA) ont des pools de connexions. Ils vont ouvrir un certain nombre de connexions, de les garder en vie et de les donner à vous en 1/100e le temps qu'il faut pour créer un à partir de zéro.

En outre, ils ont aussi des caractéristiques intéressantes, dans JBOSS par exemple, toutes les informations de connexion sont stockées dans un fichier externe. Si vous modifiez les informations de connexion c'est à dire, vous passez d'un test à une base de données de production, votre demande sera dynamiquement être nourris avec des connexions à partir de la nouvelle piscine

La bonne nouvelle, c'est que vous avez donn pas besoin d'exécuter un conteneur J2EE juste à utiliser la connexion de la mutualisation. La ressource externe permet le mot de passe pour être stocké dans un texte brut, ou pseudo-crypté.

Pour un guide sur l'utilisation de Tomcat intégré le regroupement de connexion, voir le apache commons-dbcp:

1voto

curtisk Points 8623

Puisque je ne suis pas tout à fait clair sur votre environnement autre que Java et JDBC parlant à Oracle, je vais en parler.

Si vous parlez d'une application Java EE, vous devriez pouvoir configurer des pools de connexions et des sources de données sur le serveur d'applications, puis votre application parle au pool de connexions qui gère la connectivité à ce niveau.

Le pool de connexions et la source de données contiennent et sécurisent les informations d'identification.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X